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.
4e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
7e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../../third_party/base/nonstd_unique_ptr.h"
8e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/fsdk_define.h"
9e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/fsdk_mgr.h"
10e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/fsdk_baseannot.h"
11e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/fsdk_baseform.h"
12e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/formfiller/FFL_FormFiller.h"
13e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/fsdk_actionhandler.h"
14e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
15e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include "../include/javascript/IJavaScript.h"
16e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
17e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//------------------------------------------------------------------------------------
18e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//*										CPDFSDK_Widget
19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//------------------------------------------------------------------------------------
20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatZero(f)						((f) < 0.01 && (f) > -0.01)
22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatBigger(fa,fb)				((fa) > (fb) && !IsFloatZero((fa) - (fb)))
23e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatSmaller(fa,fb)				((fa) < (fb) && !IsFloatZero((fa) - (fb)))
24e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#define IsFloatEqual(fa,fb)					IsFloatZero((fa)-(fb))
25e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
26e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView, CPDFSDK_InterForm* pInterForm) :
27e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDFSDK_Annot(pAnnot, pPageView),
28e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_pInterForm(pInterForm),
29e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_nAppAge(0),
30e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_nValueAge(0)
31e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
32e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
33e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
34e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
35e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Widget::~CPDFSDK_Widget()
36e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
37e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
38e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
39e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
40e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL		CPDFSDK_Widget::IsWidgetAppearanceValid(CPDF_Annot::AppearanceMode mode)
41e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
42e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot != NULL);
43e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
44e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
45e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pAP = m_pAnnot->m_pAnnotDict->GetDict("AP");
46e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pAP == NULL) return FALSE;
47e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
48e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	// Choose the right sub-ap
49e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	const FX_CHAR* ap_entry = "N";
50e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (mode == CPDF_Annot::Down)
51e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ap_entry = "D";
52e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else if (mode == CPDF_Annot::Rollover)
53e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ap_entry = "R";
54e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!pAP->KeyExist(ap_entry))
55e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ap_entry = "N";
56e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
57e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	// Get the AP stream or subdirectory
58e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Object* psub = pAP->GetElementValue(ap_entry);
59e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (psub == NULL) return FALSE;
60e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
61e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nFieldType = GetFieldType();
62e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nFieldType)
63e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
64e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_PUSHBUTTON:
65e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_COMBOBOX:
66e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_LISTBOX:
67e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_TEXTFIELD:
68e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_SIGNATURE:
69e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return psub->GetType() == PDFOBJ_STREAM;
70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_CHECKBOX:
71e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_RADIOBUTTON:
72e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (psub->GetType() == PDFOBJ_DICTIONARY)
73e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
74e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Dictionary* pSubDict = (CPDF_Dictionary*)psub;
75e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
76e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return pSubDict->GetStream(this->GetAppState()) != NULL;
77e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
78e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
79e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return FALSE;
80e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
81e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
82e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
83e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
84e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
85e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
86e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_Widget::GetFieldType() const
87e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
88e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pField = GetFormField();
89e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
90e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
91e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pField->GetFieldType();
92e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
93e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
94e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint CPDFSDK_Widget::GetFieldFlags() const
95e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
96e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
97e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pPDFInterForm != NULL);
98e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
99e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormControl = pPDFInterForm->GetControlByDict(m_pAnnot->m_pAnnotDict);
100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = pFormControl->GetField();
101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetFieldFlags();
102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_ByteString CPDFSDK_Widget::GetSubType() const
105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nType = GetFieldType();
107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nType == FIELDTYPE_SIGNATURE)
109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return BFFT_SIGNATURE;
110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDFSDK_Annot::GetSubType();
111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_FormField*	CPDFSDK_Widget::GetFormField() const
114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pCtrl = GetFormControl();
118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pCtrl != NULL);
119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pCtrl->GetField();
121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_FormControl* CPDFSDK_Widget::GetFormControl() const
124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_InterForm* pPDFInterForm = m_pInterForm->GetInterForm();
128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pPDFInterForm != NULL);
129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pPDFInterForm->GetControlByDict(GetAnnotDict());
131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovstatic CPDF_Dictionary* BF_GetField(CPDF_Dictionary* pFieldDict, const FX_CHAR* name)
133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pFieldDict == NULL) return NULL;
135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	// First check the dictionary itself
136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Object* pAttr = pFieldDict->GetElementValue(name);
137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pAttr) return pFieldDict;
138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	// Now we need to search from parents
140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pParent = pFieldDict->GetDict("Parent");
141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pParent == NULL) return NULL;
142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return BF_GetField(pParent, name);
144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_FormControl* CPDFSDK_Widget::GetFormControl(CPDF_InterForm* pInterForm, CPDF_Dictionary* pAnnotDict)
147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pInterForm != NULL);
149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pAnnotDict != NULL);
150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = pInterForm->GetControlByDict(pAnnotDict);
152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pControl;
154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint CPDFSDK_Widget::GetRotate() const
157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pCtrl = this->GetFormControl();
159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pCtrl != NULL);
160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pCtrl->GetRotation() % 360;
162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPDFSDK_Widget::GetFillColor(FX_COLORREF& color) const
165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int iColorType = 0;
170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	color = FX_ARGBTOCOLORREF(pFormCtrl->GetBackgroundColor(iColorType));
171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return iColorType != COLORTYPE_TRANSPARENT;
173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPDFSDK_Widget::GetBorderColor(FX_COLORREF& color) const
176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int iColorType = 0;
181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	color = FX_ARGBTOCOLORREF(pFormCtrl->GetBorderColor(iColorType));
182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return iColorType != COLORTYPE_TRANSPARENT;
184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPDFSDK_Widget::GetTextColor(FX_COLORREF& color) const
187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (da.HasColor())
193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_ARGB argb;
195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int iColorType = COLORTYPE_TRANSPARENT;
196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		da.GetColor(argb, iColorType);
197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		color = FX_ARGBTOCOLORREF(argb);
198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return iColorType != COLORTYPE_TRANSPARENT;
200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_FLOAT CPDFSDK_Widget::GetFontSize() const
206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_DefaultAppearance pDa = pFormCtrl->GetDefaultAppearance();
211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csFont = "";
212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fFontSize = 0.0f;
213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pDa.GetFont(csFont, fFontSize);
214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return fFontSize;
216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_Widget::GetSelectedIndex(int nIndex) const
219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetSelectedIndex(nIndex);
224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_Widget::GetValue() const
227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetValue();
232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_Widget::GetDefaultValue() const
235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetDefaultValue();
240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const
243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetOptionLabel(nIndex);
248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_Widget::CountOptions() const
251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->CountOptions();
256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPDFSDK_Widget::IsOptionSelected(int nIndex) const
259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->IsItemSelected(nIndex);
264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_Widget::GetTopVisibleIndex() const
267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetTopVisibleIndex();
272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPDFSDK_Widget::IsChecked() const
275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormCtrl->IsChecked();
280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_Widget::GetAlignment() const
283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormCtrl->GetControlAlignment();
288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_Widget::GetMaxLen() const
291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetMaxLen();
296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::SetCheck(FX_BOOL bChecked, FX_BOOL bNotify)
299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = pFormCtrl->GetField();
304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pFormField->CheckControl(pFormField->GetControlIndex(pFormCtrl), bChecked, bNotify);
307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, FX_BOOL bNotify)
310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pFormField->SetValue(sValue, bNotify);
315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue)
318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::SetOptionSelection(int index, FX_BOOL bSelected, FX_BOOL bNotify)
321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = GetFormField();
323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pFormField->SetItemSelection(index, bSelected, bNotify);
326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ClearSelection(FX_BOOL bNotify)
329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = GetFormField();
331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pFormField->ClearSelection(bNotify);
334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::SetTopVisibleIndex(int index)
337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::SetAppModified()
341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bAppModified = TRUE;
343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ClearAppModified()
346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bAppModified = FALSE;
348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_Widget::IsAppModified() const
351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_bAppModified;
353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance(FX_LPCWSTR sValue, FX_BOOL bValueChanged)
356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	SetAppModified();
358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nAppAge++;
360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_nAppAge > 999999)
361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nAppAge = 0;
362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bValueChanged)
363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nValueAge++;
364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nFieldType = GetFieldType();
366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nFieldType)
368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_PUSHBUTTON:
370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ResetAppearance_PushButton();
371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_CHECKBOX:
373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ResetAppearance_CheckBox();
374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_RADIOBUTTON:
376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ResetAppearance_RadioButton();
377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_COMBOBOX:
379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ResetAppearance_ComboBox(sValue);
380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_LISTBOX:
382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ResetAppearance_ListBox();
383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case FIELDTYPE_TEXTFIELD:
385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ResetAppearance_TextField(sValue);
386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot != NULL);
390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pAnnot->ClearCachedAP();
391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_Widget::OnFormat(int nCommitKey, FX_BOOL& bFormated)
394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	CPDF_FormField* pFormField = GetFormField();
396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	ASSERT(pFormField != NULL);
397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	ASSERT(m_pInterForm != NULL);
399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pInterForm->OnFormat(pFormField, nCommitKey, bFormated);
401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetFieldAppearance(FX_BOOL bValueChanged)
405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = GetFormField();
407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pInterForm->ResetFieldAppearance(pFormField, NULL, bValueChanged);
412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid	CPDFSDK_Widget::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions)
416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nFieldType = GetFieldType();
418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if ((nFieldType == FIELDTYPE_CHECKBOX || nFieldType == FIELDTYPE_RADIOBUTTON) &&
420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		mode == CPDF_Annot::Normal &&
421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		!this->IsWidgetAppearanceValid(CPDF_Annot::Normal))
422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_PathData pathData;
424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcAnnot = this->GetRect();
426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pathData.AppendRect(rcAnnot.left, rcAnnot.bottom,
428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			rcAnnot.right, rcAnnot.top);
429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_GraphStateData gsd;
431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		gsd.m_LineWidth = 0.0f;
432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pDevice->DrawPath(&pathData, pUser2Device, &gsd, 0, 0xFFAAAAAA, FXFILL_ALTERNATE);
434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFSDK_Annot::DrawAppearance(pDevice, pUser2Device, mode, pOptions);
438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::UpdateField()
442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = GetFormField();
444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pInterForm->UpdateField(pFormField);
448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::DrawShadow(CFX_RenderDevice* pDevice, CPDFSDK_PageView* pPageView)
451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	ASSERT(m_pInterForm != NULL);
453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nFieldType = GetFieldType();
455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	if (m_pInterForm->IsNeedHighLight(nFieldType))
456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	{
457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//  		if (nFieldType != FIELDTYPE_PUSHBUTTON)
459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//  		{
460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Rect rc  = GetRect();
461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_COLORREF color = m_pInterForm->GetHighlightColor(nFieldType);
462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_BYTE alpha = m_pInterForm->GetHighlightAlpha();
463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CFX_FloatRect rcDevice;
465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ASSERT(m_pInterForm->GetDocument());
466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFDoc_Environment* pEnv = m_pInterForm->GetDocument()->GetEnv();
467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if(!pEnv)
468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return;
469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CFX_AffineMatrix page2device;
470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pPageView->GetCurrentMatrix(page2device);
471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom), rcDevice.left, rcDevice.bottom);
472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.left, rc.bottom, &rcDevice.left, &rcDevice.bottom);
473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 			pEnv->FFI_PageToDevice(m_pPageView->GetPDFPage(), rc.right, rc.top, &rcDevice.right, &rcDevice.top);
474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			page2device.Transform(((FX_FLOAT)rc.right), ((FX_FLOAT)rc.top), rcDevice.right, rcDevice.top);
475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			rcDevice.Normalize();
477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_ARGB argb = ArgbEncode((int)alpha, color);
479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_RECT rcDev((int)rcDevice.left,(int)rcDevice.top,(int)rcDevice.right,(int)rcDevice.bottom);
480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pDevice->FillRect(&rcDev, argb);
481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			/* 		}*/
482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance_PushButton()
486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcWindow = GetRotatedRect();
493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nLayout = 0;
495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (pControl->GetTextPosition())
497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case TEXTPOS_ICON:
499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_ICON;
500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case TEXTPOS_BELOW:
502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_ICONTOPLABELBOTTOM;
503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case TEXTPOS_ABOVE:
505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_LABELTOPICONBOTTOM;
506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case TEXTPOS_RIGHT:
508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_ICONLEFTLABELRIGHT;
509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case TEXTPOS_LEFT:
511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_LABELLEFTICONRIGHT;
512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case TEXTPOS_OVERLAID:
514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_LABELOVERICON;
515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nLayout = PPBL_LABEL;
518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBackground, crBorder;
522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int iColorType;
524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fc[4];
525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pControl->GetOriginalBackgroundColor(iColorType, fc);
527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pControl->GetOriginalBorderColor(iColorType, fc);
531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nBorderStyle = 0;
536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash dsBorder(3,0,0);
537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crLeftTop,crRightBottom;
538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (GetBorderStyle())
540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_DASH:
542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_DASH;
543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		dsBorder = CPWL_Dash(3, 3, 0);
544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_BEVELED:
546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_BEVELED;
547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,1);
549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Utils::DevideColor(crBackground,2);
550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_INSET:
552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_INSET;
553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5);
555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75);
556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_UNDERLINE:
558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_UNDERLINED;
559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_SOLID;
562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,fBorderWidth);
566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crText(COLORTYPE_GRAY,0);
568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fFontSize = 12.0f;
570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csNameTag;
571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (da.HasColor())
574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		da.GetColor(iColorType, fc);
576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (da.HasFont())
580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		da.GetFont(csNameTag, fFontSize);
581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString csWCaption;
583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString csNormalCaption, csRolloverCaption, csDownCaption;
584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pControl->HasMKEntry("CA"))
586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csNormalCaption = pControl->GetNormalCaption();
588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pControl->HasMKEntry("RC"))
590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csRolloverCaption = pControl->GetRolloverCaption();
592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pControl->HasMKEntry("AC"))
594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csDownCaption = pControl->GetDownCaption();
596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Stream* pNormalIcon = NULL;
599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Stream* pRolloverIcon = NULL;
600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Stream* pDownIcon = NULL;
601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pControl->HasMKEntry("I"))
603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pNormalIcon = pControl->GetNormalIcon();
605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pControl->HasMKEntry("RI"))
607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pRolloverIcon = pControl->GetRolloverIcon();
609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pControl->HasMKEntry("IX"))
611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pDownIcon = pControl->GetDownIcon();
613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pNormalIcon)
616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (CPDF_Dictionary* pImageDict = pNormalIcon->GetDict())
618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pImageDict->GetString("Name").IsEmpty())
620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pImageDict->SetAtString("Name", "ImgA");
621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pRolloverIcon)
625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (CPDF_Dictionary* pImageDict = pRolloverIcon->GetDict())
627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pImageDict->GetString("Name").IsEmpty())
629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pImageDict->SetAtString("Name", "ImgB");
630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pDownIcon)
634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (CPDF_Dictionary* pImageDict = pDownIcon->GetDict())
636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pImageDict->GetString("Name").IsEmpty())
638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pImageDict->SetAtString("Name", "ImgC");
639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_IconFit iconFit = pControl->GetIconFit();
643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// 	ASSERT(this->m_pBaseForm != NULL);
645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(this->m_pInterForm != NULL);
646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pDoc != NULL);
648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFDoc_Environment* pEnv = pDoc->GetEnv();
649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	CBA_FontMap FontMap(this,pEnv->GetSysHandler());//, ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FontMap.Initial();
652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FontMap.SetAPType("N");
654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) +
657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pNormalIcon, iconFit, csNormalCaption, crText, fFontSize, nLayout);
658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP);
660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pNormalIcon)
661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		AddImageToAppearance("N", pNormalIcon);
662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl::HighlightingMode eHLM = pControl->GetHighlightingMode();
664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (eHLM == CPDF_FormControl::Push || eHLM == CPDF_FormControl::Toggle)
665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (csRolloverCaption.IsEmpty() && !pRolloverIcon)
667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			csRolloverCaption = csNormalCaption;
669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pRolloverIcon = pNormalIcon;
670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FontMap.SetAPType("R");
673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, crBackground) +
675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) +
676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pRolloverIcon, iconFit, csRolloverCaption, crText, fFontSize, nLayout);
677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		WriteAppearance("R", GetRotatedRect(), GetMatrix(), csAP);
679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pRolloverIcon)
680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			AddImageToAppearance("R", pRolloverIcon);
681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (csDownCaption.IsEmpty() && !pDownIcon)
683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			csDownCaption = csNormalCaption;
685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pDownIcon = pNormalIcon;
686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		switch (nBorderStyle)
689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case PBS_BEVELED:
691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPWL_Color crTemp = crLeftTop;
693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				crLeftTop = crRightBottom;
694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				crRightBottom = crTemp;
695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case PBS_INSET:
698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FontMap.SetAPType("D");
704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csAP = CPWL_Utils::GetRectFillAppStream(rcWindow, CPWL_Utils::SubstractColor(crBackground,0.25f)) +
706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle, dsBorder) +
707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Utils::GetPushButtonAppStream(iconFit.GetFittingBounds() ? rcWindow : rcClient, &FontMap, pDownIcon, iconFit, csDownCaption, crText, fFontSize, nLayout);
708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP);
710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pDownIcon)
711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			AddImageToAppearance("D", pDownIcon);
712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RemoveAppearance("D");
716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		RemoveAppearance("R");
717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance_CheckBox()
721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBackground, crBorder, crText;
728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int iColorType;
730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fc[4];
731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pControl->GetOriginalBackgroundColor(iColorType, fc);
733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pControl->GetOriginalBorderColor(iColorType, fc);
737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nBorderStyle = 0;
742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash dsBorder(3,0,0);
743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crLeftTop,crRightBottom;
744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (GetBorderStyle())
746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_DASH:
748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_DASH;
749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		dsBorder = CPWL_Dash(3, 3, 0);
750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_BEVELED:
752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_BEVELED;
753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,1);
755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Utils::DevideColor(crBackground,2);
756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_INSET:
758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_INSET;
759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5);
761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75);
762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_UNDERLINE:
764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_UNDERLINED;
765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_SOLID;
768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcWindow = GetRotatedRect();
772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow,fBorderWidth);
773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (da.HasColor())
776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		da.GetColor(iColorType, fc);
778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nStyle = 0;
782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString csWCaption = pControl->GetNormalCaption();
784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (csWCaption.GetLength() > 0)
785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		switch (csWCaption[0])
787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'l':
789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_CIRCLE;
790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'8':
792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_CROSS;
793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'u':
795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_DIAMOND;
796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'n':
798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_SQUARE;
799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'H':
801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_STAR;
802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		default: //L'4'
804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_CHECK;
805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nStyle = PCS_CHECK;
811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,crBackground) +
814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_N_OFF = csAP_N_ON;
817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nBorderStyle)
819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case PBS_BEVELED:
821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Color crTemp = crLeftTop;
823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = crRightBottom;
824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = crTemp;
825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case PBS_INSET:
828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_D_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,CPWL_Utils::SubstractColor(crBackground,0.25f)) +
834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_D_OFF = csAP_D_ON;
837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	csAP_N_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient,nStyle,crText);
839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	csAP_D_ON += CPWL_Utils::GetCheckBoxAppStream(rcClient,nStyle,crText);
840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, pControl->GetCheckedAPState());
842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, pControl->GetCheckedAPState());
845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAS = GetAppState();
848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (csAS.IsEmpty())
849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetAppState("Off");
850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance_RadioButton()
853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBackground, crBorder, crText;
860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int iColorType;
862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fc[4];
863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pControl->GetOriginalBackgroundColor(iColorType, fc);
865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBackground = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pControl->GetOriginalBorderColor(iColorType, fc);
869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nBorderStyle = 0;
874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash dsBorder(3,0,0);
875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crLeftTop,crRightBottom;
876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (GetBorderStyle())
878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_DASH:
880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_DASH;
881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		dsBorder = CPWL_Dash(3, 3, 0);
882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_BEVELED:
884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_BEVELED;
885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,1);
887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Utils::DevideColor(crBackground,2);
888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_INSET:
890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_INSET;
891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5);
893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75);
894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_UNDERLINE:
896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_UNDERLINED;
897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_SOLID;
900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcWindow = GetRotatedRect();
904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcClient = CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (da.HasColor())
908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		da.GetColor(iColorType, fc);
910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nStyle = 0;
914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString csWCaption = pControl->GetNormalCaption();
916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (csWCaption.GetLength() > 0)
917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		switch (csWCaption[0])
919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		default: //L'l':
921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_CIRCLE;
922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'8':
924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_CROSS;
925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'u':
927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_DIAMOND;
928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'n':
930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_SQUARE;
931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'H':
933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_STAR;
934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case L'4':
936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			nStyle = PCS_CHECK;
937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nStyle = PCS_CIRCLE;
943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_N_ON;
946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcCenter = CPWL_Utils::DeflateRect(CPWL_Utils::GetCenterSquare(rcWindow), 1.0f);
948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nStyle == PCS_CIRCLE)
950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (nBorderStyle == PBS_BEVELED)
952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = CPWL_Utils::SubstractColor(crBackground,0.25f);
955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (nBorderStyle == PBS_INSET)
957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = CPWL_Color(COLORTYPE_GRAY,0.5f);
959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = CPWL_Color(COLORTYPE_GRAY,0.75f);
960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csAP_N_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter,crBackground) +
963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Utils::GetCircleBorderAppStream(rcCenter,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csAP_N_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,crBackground) +
968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_N_OFF = csAP_N_ON;
972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (nBorderStyle)
974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case PBS_BEVELED:
976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Color crTemp = crLeftTop;
978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = crRightBottom;
979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = crTemp;
980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case PBS_INSET:
983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_D_ON;
989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nStyle == PCS_CIRCLE)
991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPWL_Color crBK = CPWL_Utils::SubstractColor(crBackground,0.25f);
993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (nBorderStyle == PBS_BEVELED)
994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = CPWL_Utils::SubstractColor(crBackground,0.25f);
996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = CPWL_Color(COLORTYPE_GRAY, 1);
997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crBK = crBackground;
998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (nBorderStyle == PBS_INSET)
1000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crLeftTop = CPWL_Color(COLORTYPE_GRAY,0);
1002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			crRightBottom = CPWL_Color(COLORTYPE_GRAY,1);
1003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1005e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csAP_D_ON = CPWL_Utils::GetCircleFillAppStream(rcCenter,crBK)
1006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			+ CPWL_Utils::GetCircleBorderAppStream(rcCenter,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
1007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
1009e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1010e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		csAP_D_ON = CPWL_Utils::GetRectFillAppStream(rcWindow,CPWL_Utils::SubstractColor(crBackground,0.25f)) +
1011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Utils::GetBorderAppStream(rcWindow,fBorderWidth,crBorder,crLeftTop,crRightBottom,nBorderStyle,dsBorder);
1012e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAP_D_OFF = csAP_D_ON;
1015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	csAP_N_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient,nStyle,crText);
1017e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	csAP_D_ON += CPWL_Utils::GetRadioButtonAppStream(rcClient,nStyle,crText);
1018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1019e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_ON, pControl->GetCheckedAPState());
1020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), csAP_N_OFF, "Off");
1021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1022e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_ON, pControl->GetCheckedAPState());
1023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("D", GetRotatedRect(), GetMatrix(), csAP_D_OFF, "Off");
1024e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1025e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString csAS = GetAppState();
1026e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (csAS.IsEmpty())
1027e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		SetAppState("Off");
1028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1029e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance_ComboBox(FX_LPCWSTR sValue)
1031e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1032e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
1033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
1034e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pField = pControl->GetField();
1035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
1036e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteTextBuf sBody, sLines;
1038e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcClient = GetClientRect();
1040e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcButton = rcClient;
1041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	rcButton.left = rcButton.right - 13;
1042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	rcButton.Normalize();
1043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
1045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->EnableRefresh(FALSE);
1047e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(this->m_pInterForm != NULL);
1049e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pDoc != NULL);
1051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CBA_FontMap FontMap(this,pEnv->GetSysHandler());
1053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FontMap.Initial();
1054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetFontMap(&FontMap);
1055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcEdit = rcClient;
1057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		rcEdit.right = rcButton.left;
1058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		rcEdit.Normalize();
1059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetPlateRect(rcEdit);
1061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetAlignmentV(1);
1062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_FLOAT fFontSize = this->GetFontSize();
1064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsFloatZero(fFontSize))
1065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetAutoFontSize(TRUE);
1066e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1067e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetFontSize(fFontSize);
1068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->Initialize();
1070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (sValue)
1072e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetText(sValue);
1073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_INT32 nCurSel = pField->GetSelectedIndex(0);
1076e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (nCurSel < 0)
1078e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pEdit->SetText(pField->GetValue().c_str());
1079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
1080e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pEdit->SetText(pField->GetOptionLabel(nCurSel).c_str());
1081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1082e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcContent = pEdit->GetContentRect();
1084e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f));
1086e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (sEdit.GetLength() > 0)
1087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sBody << "/Tx BMC\n" << "q\n";
1089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (rcContent.Width() > rcEdit.Width() ||
1090e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				rcContent.Height() > rcEdit.Height())
1091e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1092e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sBody << rcEdit.left << " " << rcEdit.bottom << " "
1093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					<< rcEdit.Width() << " " << rcEdit.Height() << " re\nW\nn\n";
1094e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Color crText = GetTextPWLColor();
1097e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n" << "Q\nEMC\n";
1098e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1099e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		IFX_Edit::DelEdit(pEdit);
1101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	sBody << CPWL_Utils::GetDropButtonAppStream(rcButton);
1104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString();
1106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
1108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance_ListBox()
1111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
1113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
1114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pField = pControl->GetField();
1115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
1116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcClient = GetClientRect();
1118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteTextBuf sBody, sLines;
1120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
1122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->EnableRefresh(FALSE);
1124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//		ASSERT(this->m_pBaseForm != NULL);
1126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(this->m_pInterForm != NULL);
1127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pDoc != NULL);
1129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CBA_FontMap FontMap(this,pEnv->GetSysHandler());
1132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FontMap.Initial();
1133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetFontMap(&FontMap);
1134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetPlateRect(CPDF_Rect(rcClient.left,0.0f,rcClient.right,0.0f));
1136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_FLOAT fFontSize = GetFontSize();
1138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsFloatZero(fFontSize))
1140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetFontSize(12.0f);
1141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetFontSize(fFontSize);
1143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->Initialize();
1145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_ByteTextBuf sList;
1147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_FLOAT fy = rcClient.top;
1148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_INT32 nTop = pField->GetTopVisibleIndex();
1150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_INT32 nCount = pField->CountOptions();
1151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_INT32 nSelCount = pField->CountSelectedItems();
1152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		for (FX_INT32 i=nTop; i<nCount; i++)
1154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_BOOL bSelected = FALSE;
1156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			for (FX_INT32 j=0; j<nSelCount; j++)
1157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pField->GetSelectedIndex(j) == i)
1159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					bSelected = TRUE;
1161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					break;
1162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetText(pField->GetOptionLabel(i).c_str());
1166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Rect rcContent = pEdit->GetContentRect();
1168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_FLOAT fItemHeight = rcContent.Height();
1169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bSelected)
1171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPDF_Rect rcItem = CPDF_Rect(rcClient.left,fy-fItemHeight,rcClient.right,fy);
1173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sList << "q\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_RGB,0,51.0f/255.0f,113.0f/255.0f),TRUE)
1174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					<< rcItem.left << " " << rcItem.bottom << " " << rcItem.Width() << " " << rcItem.Height() << " re f\n" << "Q\n";
1175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sList << "BT\n" << CPWL_Utils::GetColorAppStream(CPWL_Color(COLORTYPE_GRAY,1),TRUE) <<
1177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,fy)) << "ET\n";
1178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
1180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPWL_Color crText = GetTextPWLColor();
1182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sList << "BT\n" << CPWL_Utils::GetColorAppStream(crText,TRUE) <<
1183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,fy)) << "ET\n";
1184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fy -= fItemHeight;
1187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (sList.GetSize() > 0)
1190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sBody << "/Tx BMC\n" << "q\n" << rcClient.left << " " << rcClient.bottom << " "
1192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					<< rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
1193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sBody << sList << "Q\nEMC\n";
1194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		IFX_Edit::DelEdit(pEdit);
1197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString();
1200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
1202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::ResetAppearance_TextField(FX_LPCWSTR sValue)
1205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
1207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
1208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pField = pControl->GetField();
1209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
1210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteTextBuf sBody, sLines;
1212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (IFX_Edit * pEdit = IFX_Edit::NewEdit())
1214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->EnableRefresh(FALSE);
1216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//		ASSERT(this->m_pBaseForm != NULL);
1218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(this->m_pInterForm != NULL);
1219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
1220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pDoc != NULL);
1221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFDoc_Environment* pEnv = pDoc->GetEnv();
1222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CBA_FontMap FontMap(this,pEnv->GetSysHandler());//, ISystemHandle::GetSystemHandler(m_pBaseForm->GetEnv()));
1224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FontMap.Initial();
1225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetFontMap(&FontMap);
1226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcClient = GetClientRect();
1228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetPlateRect(rcClient);
1229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->SetAlignmentH(pControl->GetControlAlignment());
1230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_DWORD dwFieldFlags = pField->GetFieldFlags();
1232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bMultiLine = (dwFieldFlags >> 12) & 1;
1233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bMultiLine)
1235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetMultiLine(TRUE);
1237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetAutoReturn(TRUE);
1238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetAlignmentV(1);
1242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_WORD subWord = 0;
1245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if ((dwFieldFlags >> 13) & 1)
1246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			subWord = '*';
1248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetPasswordChar(subWord);
1249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nMaxLen = pField->GetMaxLen();
1252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bCharArray = (dwFieldFlags >> 24) & 1;
1253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_FLOAT fFontSize = GetFontSize();
1254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (nMaxLen > 0)
1256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bCharArray)
1258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pEdit->SetCharArray(nMaxLen);
1260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (IsFloatZero(fFontSize))
1262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					fFontSize = CPWL_Edit::GetCharArrayAutoFontSize(FontMap.GetPDFFont(0),rcClient,nMaxLen);
1264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
1267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (sValue)
1269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nMaxLen = wcslen((const wchar_t*)sValue);
1270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pEdit->SetLimitChar(nMaxLen);
1271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (IsFloatZero(fFontSize))
1275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetAutoFontSize(TRUE);
1276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetFontSize(fFontSize);
1278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pEdit->Initialize();
1280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (sValue)
1282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetText(sValue);
1283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
1284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEdit->SetText(pField->GetValue().c_str());
1285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Rect rcContent = pEdit->GetContentRect();
1287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_ByteString sEdit = CPWL_Utils::GetEditAppStream(pEdit,CPDF_Point(0.0f,0.0f),
1289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov																	NULL,!bCharArray,subWord);
1290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (sEdit.GetLength() > 0)
1292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sBody << "/Tx BMC\n" << "q\n";
1294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (rcContent.Width() > rcClient.Width() ||
1295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				rcContent.Height() > rcClient.Height())
1296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sBody << rcClient.left << " " << rcClient.bottom << " "
1298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					<< rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
1299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPWL_Color crText = GetTextPWLColor();
1301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sBody << "BT\n" << CPWL_Utils::GetColorAppStream(crText) << sEdit << "ET\n" << "Q\nEMC\n";
1302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bCharArray)
1305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			switch (GetBorderStyle())
1307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case BBS_SOLID:
1309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CFX_ByteString sColor = CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE);
1311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (sColor.GetLength() > 0)
1312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						sLines << "q\n" << GetBorderWidth() << " w\n"
1314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							<< CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE) << " 2 J 0 j\n";
1315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (FX_INT32 i=1;i<nMaxLen;i++)
1317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							sLines << rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
1319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								<< rcClient.bottom << " m\n"
1320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								<< rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
1321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								<< rcClient.top << " l S\n";
1322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						sLines << "Q\n";
1325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				break;
1328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			case BBS_DASH:
1329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CFX_ByteString sColor = CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE);
1331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (sColor.GetLength() > 0)
1332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
1334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						sLines << "q\n" << GetBorderWidth() << " w\n"
1336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							<< CPWL_Utils::GetColorAppStream(GetBorderPWLColor(),FALSE)
1337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							<< "[" << dsBorder.nDash << " "
1338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							<< dsBorder.nGap << "] "
1339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							<< dsBorder.nPhase << " d\n";
1340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (FX_INT32 i=1;i<nMaxLen;i++)
1342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							sLines << rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
1344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								<< rcClient.bottom << " m\n"
1345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								<< rcClient.left + ((rcClient.right - rcClient.left)/nMaxLen)*i << " "
1346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								<< rcClient.top << " l S\n";
1347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						sLines << "Q\n";
1350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				break;
1353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		IFX_Edit::DelEdit(pEdit);
1357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString sAP = GetBackgroundAppStream() + GetBorderAppStream() + sLines.GetByteString() + sBody.GetByteString();
1360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	WriteAppearance("N", GetRotatedRect(), GetMatrix(), sAP);
1361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CPDFSDK_Widget::GetClientRect() const
1364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcWindow = GetRotatedRect();
1366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
1367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (GetBorderStyle())
1368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_BEVELED:
1370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_INSET:
1371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2.0f;
1372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPWL_Utils::DeflateRect(rcWindow, fBorderWidth);
1376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CPDFSDK_Widget::GetRotatedRect() const
1379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rectAnnot = GetRect();
1381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fWidth = rectAnnot.right - rectAnnot.left;
1382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fHeight = rectAnnot.top - rectAnnot.bottom;
1383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
1385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
1386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcPDFWindow;
1388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch(abs(pControl->GetRotation() % 360))
1389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 0:
1391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 180:
1392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		default:
1393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			rcPDFWindow = CPDF_Rect(0, 0, fWidth, fHeight);
1394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
1395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 90:
1396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 270:
1397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			rcPDFWindow = CPDF_Rect(0, 0, fHeight, fWidth);
1398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
1399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return rcPDFWindow;
1402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_ByteString CPDFSDK_Widget::GetBackgroundAppStream() const
1405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBackground = GetFillPWLColor();
1407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (crBackground.nColorType != COLORTYPE_TRANSPARENT)
1408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return CPWL_Utils::GetRectFillAppStream(GetRotatedRect(), crBackground);
1409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
1410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return "";
1411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_ByteString CPDFSDK_Widget::GetBorderAppStream() const
1414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcWindow = GetRotatedRect();
1416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBorder = GetBorderPWLColor();
1417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBackground = GetFillPWLColor();
1418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crLeftTop, crRightBottom;
1419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fBorderWidth = (FX_FLOAT)GetBorderWidth();
1421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 nBorderStyle = 0;
1422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Dash dsBorder(3,0,0);
1423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (GetBorderStyle())
1425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_DASH:
1427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_DASH;
1428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		dsBorder = CPWL_Dash(3, 3, 0);
1429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_BEVELED:
1431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_BEVELED;
1432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
1433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY, 1);
1434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Utils::DevideColor(crBackground, 2);
1435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_INSET:
1437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_INSET;
1438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		fBorderWidth *= 2;
1439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crLeftTop = CPWL_Color(COLORTYPE_GRAY, 0.5);
1440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom = CPWL_Color(COLORTYPE_GRAY, 0.75);
1441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BBS_UNDERLINE:
1443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_UNDERLINED;
1444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
1446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBorderStyle = PBS_SOLID;
1447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPWL_Utils::GetBorderAppStream(rcWindow, fBorderWidth, crBorder, crLeftTop,
1451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crRightBottom, nBorderStyle, dsBorder);
1452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Matrix CPDFSDK_Widget::GetMatrix() const
1455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Matrix mt;
1457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pControl = GetFormControl();
1458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControl != NULL);
1459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcAnnot = GetRect();
1461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fWidth = rcAnnot.right - rcAnnot.left;
1462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fHeight = rcAnnot.top - rcAnnot.bottom;
1463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (abs(pControl->GetRotation() % 360))
1467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 0:
1469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		default:
1470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			mt = CPDF_Matrix(1, 0, 0, 1, 0, 0);
1471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
1472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 90:
1473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			mt = CPDF_Matrix(0, 1, -1, 0, fWidth, 0);
1474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
1475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 180:
1476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			mt = CPDF_Matrix(-1, 0, 0, -1, fWidth, fHeight);
1477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
1478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		case 270:
1479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			mt = CPDF_Matrix(0, -1, 1, 0, 0, fHeight);
1480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
1481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return mt;
1484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_Color CPDFSDK_Widget::GetTextPWLColor() const
1487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crText = CPWL_Color(COLORTYPE_GRAY, 0);
1489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
1491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
1492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_DefaultAppearance da = pFormCtrl->GetDefaultAppearance();
1494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (da.HasColor())
1495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_INT32 iColorType;
1497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_FLOAT fc[4];
1498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		da.GetColor(iColorType, fc);
1499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crText = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return crText;
1503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_Color CPDFSDK_Widget::GetBorderPWLColor() const
1506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crBorder;
1508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
1510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
1511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 iColorType;
1513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fc[4];
1514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pFormCtrl->GetOriginalBorderColor(iColorType, fc);
1515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
1516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crBorder = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return crBorder;
1519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPWL_Color CPDFSDK_Widget::GetFillPWLColor() const
1522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPWL_Color crFill;
1524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormControl* pFormCtrl = GetFormControl();
1526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormCtrl != NULL);
1527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_INT32 iColorType;
1529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_FLOAT fc[4];
1530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pFormCtrl->GetOriginalBackgroundColor(iColorType, fc);
1531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (iColorType > 0)
1532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		crFill = CPWL_Color(iColorType, fc[0], fc[1], fc[2], fc[3]);
1533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return crFill;
1535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::AddImageToAppearance(const CFX_ByteString& sAPType, CPDF_Stream* pImage)
1538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pImage != NULL);
1540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot != NULL);
1542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Document* pDoc = m_pPageView->GetPDFDocument();//pDocument->GetDocument();
1545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pDoc != NULL);
1546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pAPDict = m_pAnnot->m_pAnnotDict->GetDict("AP");
1548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pAPDict != NULL);
1549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Stream* pStream = pAPDict->GetStream(sAPType);
1551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pStream != NULL);
1552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pStreamDict = pStream->GetDict();
1554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pStreamDict != NULL);
1555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString sImageAlias = "IMG";
1557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CPDF_Dictionary* pImageDict = pImage->GetDict())
1559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		sImageAlias = pImageDict->GetString("Name");
1561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (sImageAlias.IsEmpty())
1562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sImageAlias = "IMG";
1563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pStreamResList = pStreamDict->GetDict("Resources");
1566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!pStreamResList)
1567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pStreamResList = new CPDF_Dictionary();
1569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pStreamDict->SetAt("Resources", pStreamResList);
1570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pStreamResList)
1573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Dictionary* pXObject = new CPDF_Dictionary;
1575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pXObject->SetAtReference(sImageAlias, pDoc, pImage);
1576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pStreamResList->SetAt("XObject", pXObject);
1577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_Widget::RemoveAppearance(const CFX_ByteString& sAPType)
1581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot != NULL);
1583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CPDF_Dictionary* pAPDict = m_pAnnot->m_pAnnotDict->GetDict("AP"))
1586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pAPDict->RemoveAt(sAPType);
1588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_Widget::OnAAction(CPDF_AAction::AActionType type, PDFSDK_FieldAction& data, CPDFSDK_PageView* pPageView)
1592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Action action = GetAAction(type);
1594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (action && action.GetType() != CPDF_Action::Unknown)
1596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		CPDFSDK_Document* pDocument = pPageView->GetSDKDocument();
1598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		ASSERT(pDocument != NULL);
1599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		CPDFDoc_Environment* pEnv = pDocument->GetEnv();
1601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		ASSERT(pEnv != NULL);
1602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();/*(CPDFSDK_ActionHandler*)pApp->GetActionHandler();*/
1604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		ASSERT(pActionHandler != NULL);
1605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		return pActionHandler->DoAction_Field(action, type, pDocument, GetFormField(), data);
1607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
1610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Action	CPDFSDK_Widget::GetAAction(CPDF_AAction::AActionType eAAT)
1613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (eAAT)
1615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::CursorEnter:
1617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::CursorExit:
1618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::ButtonDown:
1619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::ButtonUp:
1620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::GetFocus:
1621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::LoseFocus:
1622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::PageOpen:
1623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::PageClose:
1624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::PageVisible:
1625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::PageInvisible:
1626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return CPDFSDK_Annot::GetAAction(eAAT);
1627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::KeyStroke:
1629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::Format:
1630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::Validate:
1631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case CPDF_AAction::Calculate:
1632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_FormField* pField = this->GetFormField();
1634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (CPDF_AAction aa = pField->GetAdditionalAction())
1635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return aa.GetAction(eAAT);
1636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return CPDFSDK_Annot::GetAAction(eAAT);
1638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
1640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
1641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return CPDF_Action();
1644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_Widget::GetAlternateName() const
1648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField*	pFormField = GetFormField();
1650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
1651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pFormField->GetAlternateName();
1653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32	CPDFSDK_Widget::GetAppearanceAge() const
1656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_nAppAge;
1658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_INT32 CPDFSDK_Widget::GetValueAge() const
1661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_nValueAge;
1663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL	CPDFSDK_Widget::HitTest(FX_FLOAT pageX, FX_FLOAT pageY)
1667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Annot* pAnnot = GetPDFAnnot();
1669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_FloatRect annotRect;
1670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pAnnot->GetRect(annotRect);
1671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(annotRect.Contains(pageX, pageY))
1672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (!IsVisible()) return FALSE;
1674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nFieldFlags = GetFieldFlags();
1676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if ((nFieldFlags & FIELDFLAG_READONLY) == FIELDFLAG_READONLY)
1677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return FALSE;
1678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return TRUE;
1680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
1682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument)
1685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	:m_pDocument(pDocument),
1686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pInterForm(NULL),
1687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bCalculate(TRUE),
1688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bBusy(FALSE)
1689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
1691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pInterForm = new CPDF_InterForm(m_pDocument->GetDocument(), FALSE);
1692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
1693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pInterForm->SetFormNotify(this);
1694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for(int i=0; i<6; i++)
1696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_bNeedHightlight[i] = FALSE;
1697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_iHighlightAlpha = 0;
1698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_InterForm::~CPDFSDK_InterForm()
1701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
1703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	delete m_pInterForm;
1704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_pInterForm = NULL;
1705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Map.RemoveAll();
1707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::Destroy()
1710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	delete this;
1712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_InterForm* CPDFSDK_InterForm::GetInterForm()
1715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pInterForm;
1717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Document* CPDFSDK_InterForm::GetDocument()
1720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pDocument;
1722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::HighlightWidgets()
1725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
1727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Widget* CPDFSDK_InterForm::GetSibling(CPDFSDK_Widget* pWidget, FX_BOOL bNext) const
1730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    nonstd::unique_ptr<CBA_AnnotIterator> pIterator(
1732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        new CBA_AnnotIterator(pWidget->GetPageView(), "Widget", ""));
1733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    if (bNext) {
1735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov        return (CPDFSDK_Widget*)pIterator->GetNextAnnot(pWidget);
1736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    }
1737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov    return (CPDFSDK_Widget*)pIterator->GetPrevAnnot(pWidget);
1738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Widget*	CPDFSDK_InterForm::GetWidget(CPDF_FormControl* pControl) const
1741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(!pControl || !m_pInterForm) return NULL;
1743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFSDK_Widget* pWidget = NULL;
1745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Map.Lookup(pControl, pWidget);
1746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pWidget) return pWidget;
1748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pControlDict = pControl->GetWidget();
1750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pControlDict != NULL);
1751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
1753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Document* pDocument = m_pDocument->GetDocument();
1754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFSDK_PageView* pPage = NULL;
1756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CPDF_Dictionary* pPageDict = pControlDict->GetDict("P"))
1758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
1760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (nPageIndex >= 0)
1761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pPage = m_pDocument->GetPageView(nPageIndex);
1763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!pPage)
1767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
1769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (nPageIndex >= 0)
1770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pPage = m_pDocument->GetPageView(nPageIndex);
1772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pPage)
1776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return (CPDFSDK_Widget*)pPage->GetAnnotByDict(pControlDict);
1777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
1779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::GetWidgets(const CFX_WideString& sFieldName, CFX_PtrArray& widgets)
1782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
1784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=m_pInterForm->CountFields(sFieldName); i<sz; i++)
1786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName);
1788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pFormField != NULL);
1789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		GetWidgets(pFormField, widgets);
1791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::GetWidgets(CPDF_FormField* pField, CFX_PtrArray& widgets)
1795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
1797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,isz=pField->CountControls(); i<isz; i++)
1799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_FormControl* pFormCtrl = pField->GetControl(i);
1801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pFormCtrl != NULL);
1802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl);
1804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pWidget)
1806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			widgets.Add(pWidget);
1807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint CPDFSDK_InterForm::GetPageIndexByAnnotDict(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict) const
1811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pDocument != NULL);
1813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pAnnotDict != NULL);
1814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=pDocument->GetPageCount(); i<sz; i++)
1816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (CPDF_Dictionary* pPageDict = pDocument->GetPage(i))
1818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (CPDF_Array* pAnnots = pPageDict->GetArray("Annots"))
1820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				for (int j=0,jsz=pAnnots->GetCount(); j<jsz; j++)
1822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_Object* pDict = pAnnots->GetElementValue(j);
1824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (pAnnotDict == pDict)
1825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						return i;
1827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return -1;
1834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::AddMap(CPDF_FormControl* pControl, CPDFSDK_Widget* pWidget)
1837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Map.SetAt(pControl, pWidget);
1839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::RemoveMap(CPDF_FormControl* pControl)
1842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Map.RemoveKey(pControl);
1844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::EnableCalculate(FX_BOOL bEnabled)
1847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bCalculate = bEnabled;
1849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::IsCalculateEnabled() const
1852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_bCalculate;
1854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#ifdef _WIN32
1857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Stream* CPDFSDK_InterForm::LoadImageFromFile(const CFX_WideString& sFile)
1858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
1860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Document* pDocument = m_pDocument->GetDocument();
1861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pDocument != NULL);
1862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Stream* pRetStream = NULL;
1864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CFX_DIBitmap* pBmp = CFX_WindowsDIB::LoadFromFile(sFile.c_str()))
1866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nWidth = pBmp->GetWidth();
1868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nHeight = pBmp->GetHeight();
1869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Image Image(pDocument);
1871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		Image.SetImage(pBmp, FALSE);
1872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Stream* pImageStream = Image.GetStream();
1873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pImageStream)
1874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pImageStream->GetObjNum() == 0)
1876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pDocument->AddIndirectObject(pImageStream);
1877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Dictionary* pStreamDict = new CPDF_Dictionary();
1879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAtName("Subtype", "Form");
1880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAtName("Name", "IMG");
1881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Array* pMatrix = new CPDF_Array();
1882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAt("Matrix", pMatrix);
1883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pMatrix->AddInteger(1);
1884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pMatrix->AddInteger(0);
1885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pMatrix->AddInteger(0);
1886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pMatrix->AddInteger(1);
1887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pMatrix->AddInteger(-nWidth / 2);
1888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pMatrix->AddInteger(-nHeight / 2);
1889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Dictionary* pResource = new CPDF_Dictionary();
1890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAt("Resources", pResource);
1891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Dictionary* pXObject = new CPDF_Dictionary();
1892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pResource->SetAt("XObject", pXObject);
1893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pXObject->SetAtReference("Img", pDocument, pImageStream);
1894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Array* pProcSet = new CPDF_Array();
1895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pResource->SetAt("ProcSet", pProcSet);
1896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pProcSet->AddName("PDF");
1897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pProcSet->AddName("ImageC");
1898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAtName("Type", "XObject");
1899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Array* pBBox = new CPDF_Array();
1900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAt("BBox", pBBox);
1901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pBBox->AddInteger(0);
1902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pBBox->AddInteger(0);
1903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pBBox->AddInteger(nWidth);
1904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pBBox->AddInteger(nHeight);
1905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pStreamDict->SetAtInteger("FormType", 1);
1906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pRetStream = new CPDF_Stream(NULL, 0, NULL);
1908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CFX_ByteString csStream;
1909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			csStream.Format("q\n%d 0 0 %d 0 0 cm\n/Img Do\nQ", nWidth, nHeight);
1910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pRetStream->InitStream((FX_BYTE*)csStream.c_str(), csStream.GetLength(), pStreamDict);
1911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pDocument->AddIndirectObject(pRetStream);
1912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete pBmp;
1915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return pRetStream;
1918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#endif
1920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField)
1922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
1924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
1925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pEnv);
1926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(!pEnv->IsJSInitiated())
1927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return;
1928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_bBusy) return;
1930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bBusy = TRUE;
1932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (this->IsCalculateEnabled())
1934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
1935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
1936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pRuntime != NULL);
1937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pRuntime->SetReaderDocument(m_pDocument);
1939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int nSize = m_pInterForm->CountFieldsInCalculationOrder();
1941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		for (int i=0; i<nSize; i++)
1942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
1943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if(CPDF_FormField* pField = m_pInterForm->GetFieldInCalculationOrder(i))
1944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
1945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov//			ASSERT(pField != NULL);
1946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				int nType = pField->GetFieldType();
1947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD)
1948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
1949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_AAction aAction = pField->GetAdditionalAction();
1950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (aAction && aAction.ActionExist(CPDF_AAction::Calculate))
1951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
1952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDF_Action action = aAction.GetAction(CPDF_AAction::Calculate);
1953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (action)
1954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
1955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CFX_WideString csJS = action.GetJavaScript();
1956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (!csJS.IsEmpty())
1957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							{
1958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								IFXJS_Context* pContext = pRuntime->NewContext();
1959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								ASSERT(pContext != NULL);
1960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								CFX_WideString sOldValue = pField->GetValue();
1962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								CFX_WideString sValue = sOldValue;
1963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								FX_BOOL bRC = TRUE;
1964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								pContext->OnField_Calculate(pFormField, pField, sValue, bRC);
1965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								CFX_WideString sInfo;
1967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								FX_BOOL bRet = pContext->RunScript(csJS, sInfo);
1968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								pRuntime->ReleaseContext(pContext);
1969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								if (bRet)
1971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								{
1972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									if (bRC)
1973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									{
1974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov										if (sValue.Compare(sOldValue) != 0)
1975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov											pField->SetValue(sValue, TRUE);
1976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									}
1977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								}
1978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							}
1979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
1980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
1981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
1982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
1983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
1984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
1987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_bBusy = FALSE;
1989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
1990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField, int nCommitKey, FX_BOOL& bFormated)
1992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
1993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
1994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
1995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
1996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString sValue = pFormField->GetValue();
1997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
1998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pEnv);
1999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(!pEnv->IsJSInitiated())
2000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		bFormated = FALSE;
2002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return sValue;
2003e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2004e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2005e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	IFXJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
2006e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pRuntime != NULL);
2007e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2008e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pRuntime->SetReaderDocument(m_pDocument);
2009e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2010e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX)
2011e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2012e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pFormField->CountSelectedItems() > 0)
2013e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2014e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			int index = pFormField->GetSelectedIndex(0);
2015e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (index >= 0)
2016e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sValue = pFormField->GetOptionLabel(index);
2017e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2018e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2019e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2020e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	bFormated = FALSE;
2021e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2022e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_AAction aAction = pFormField->GetAdditionalAction();
2023e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Format))
2024e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2025e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
2026e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (action)
2027e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2028e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CFX_WideString script = action.GetJavaScript();
2029e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (!script.IsEmpty())
2030e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2031e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CFX_WideString Value = sValue;
2032e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2033e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				IFXJS_Context* pContext = pRuntime->NewContext();
2034e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ASSERT(pContext != NULL);
2035e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2036e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pContext->OnField_Format(nCommitKey, pFormField, Value, TRUE);
2037e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2038e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CFX_WideString sInfo;
2039e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 				FX_BOOL bRet = pContext->RunScript(script, sInfo);
2040e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pRuntime->ReleaseContext(pContext);
2041e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2042e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bRet)
2043e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2044e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					sValue = Value;
2045e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					bFormated = TRUE;
2046e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2047e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2048e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2049e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2050e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2051e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return sValue;
2052e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2053e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2054e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField, FX_LPCWSTR sValue, FX_BOOL bValueChanged)
2055e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2056e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
2057e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2058e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
2059e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2060e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
2061e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pFormCtrl != NULL);
2062e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2063e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(m_pInterForm != NULL);
2064e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if(CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
2065e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pWidget->ResetAppearance(sValue, bValueChanged);
2066e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2067e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2068e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2069e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::UpdateField(CPDF_FormField* pFormField)
2070e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2071e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
2072e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2073e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=pFormField->CountControls(); i<sz; i++)
2074e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2075e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
2076e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pFormCtrl != NULL);
2077e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2078e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if(CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl))
2079e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2080e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFDoc_Environment * pEnv = m_pDocument->GetEnv();
2081e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CFFL_IFormFiller* pIFormFiller = pEnv->GetIFormFiller();
2082e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2083e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Page * pPage = pWidget->GetPDFPage();
2084e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFSDK_PageView * pPageView = m_pDocument->GetPageView(pPage,FALSE);
2085e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2086e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_RECT rcBBox = pIFormFiller->GetViewBBox(pPageView, pWidget);
2087e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2088e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pEnv->FFI_Invalidate(pPage,rcBBox.left, rcBBox.top, rcBBox.right, rcBBox.bottom);
2089e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2090e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2091e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2092e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2093e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC)
2094e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2095e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
2096e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2097e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	CPDF_AAction aAction = pFormField->GetAdditionalAction();
2098e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	if (aAction != NULL && aAction.ActionExist(CPDF_AAction::KeyStroke))
2099e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	{
2100e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		CPDF_Action action = aAction.GetAction(CPDF_AAction::KeyStroke);
2101e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		if (action)
2102e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		{
2103e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			ASSERT(m_pDocument != NULL);
2104e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2105e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			ASSERT(pEnv != NULL);
2106e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2107e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
2108e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ASSERT(pActionHandler != NULL);
2109e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2110e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			PDFSDK_FieldAction fa;
2111e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
2112e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
2113e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fa.sValue = csValue;
2114e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2115e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov   			pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke,
2116e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov   				m_pDocument, pFormField, fa);
2117e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov   			bRC = fa.bRC;
2118e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		}
2119e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	}
2120e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2121e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2122e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField, CFX_WideString& csValue, FX_BOOL& bRC)
2123e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2124e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pFormField != NULL);
2125e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2126e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	CPDF_AAction aAction = pFormField->GetAdditionalAction();
2127e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	if (aAction != NULL && aAction.ActionExist(CPDF_AAction::Validate))
2128e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	{
2129e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		CPDF_Action action = aAction.GetAction(CPDF_AAction::Validate);
2130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (action)
2131e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		{
2132e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ASSERT(m_pDocument != NULL);
2133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ASSERT(pEnv != NULL);
2135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2136e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
2137e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ASSERT(pActionHandler != NULL);
2138e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2139e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			PDFSDK_FieldAction fa;
2140e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fa.bModifier = pEnv->FFI_IsCTRLKeyDown(0);
2141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fa.bShift = pEnv->FFI_IsSHIFTKeyDown(0);
2142e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fa.sValue = csValue;
2143e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2144e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate, m_pDocument, pFormField, fa);
2145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			bRC = fa.bRC;
2146e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2147e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2148e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	}
2149e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2150e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2151e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ----------------------------- action ----------------------------- */
2152e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2153e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::DoAction_Hide(const CPDF_Action& action)
2154e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2155e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(action);
2156e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2157e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_ActionFields af = action.GetWidgets();
2158e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_PtrArray fieldObjects;
2159e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	af.GetAllFields(fieldObjects);
2160e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_PtrArray widgetArray;
2161e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_PtrArray fields;
2162e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	GetFieldFromObjects(fieldObjects, fields);
2163e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2164e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bHide = action.GetHideStatus();
2165e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2166e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bChanged = FALSE;
2167e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0, sz=fields.GetSize(); i<sz; i++)
2169e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2170e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_FormField* pField = (CPDF_FormField*)fields[i];
2171e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		ASSERT(pField != NULL);
2172e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2173e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2174e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		for (int j=0,jsz=pField->CountControls(); j<jsz; j++)
2175e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2176e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_FormControl* pControl = pField->GetControl(j);
2177e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			ASSERT(pControl != NULL);
2178e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2179e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (CPDFSDK_Widget* pWidget = GetWidget(pControl))
2180e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2181e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				int nFlags = pWidget->GetFlags();
2182e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (bHide)
2183e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2184e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nFlags &= (~ANNOTFLAG_INVISIBLE);
2185e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nFlags &= (~ANNOTFLAG_NOVIEW);
2186e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nFlags |= (ANNOTFLAG_HIDDEN);
2187e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2188e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				else
2189e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2190e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nFlags &= (~ANNOTFLAG_INVISIBLE);
2191e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nFlags &= (~ANNOTFLAG_HIDDEN);
2192e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					nFlags &= (~ANNOTFLAG_NOVIEW);
2193e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2194e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				pWidget->SetFlags(nFlags);
2195e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2196e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 				CPDFSDK_PageView* pPageView = pWidget->GetPageView();
2197e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 				ASSERT(pPageView != NULL);
2198e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2199e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 				pPageView->UpdateView(pWidget);
2200e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2201e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				bChanged = TRUE;
2202e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2203e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2204e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2205e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2206e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return bChanged;
2207e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2208e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2209e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action)
2210e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2211e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(action);
2212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
2213e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2214e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString sDestination = action.GetFilePath();
2215e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (sDestination.IsEmpty()) return FALSE;
2216e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2217e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pActionDict = action.GetDict();
2218e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pActionDict->KeyExist("Fields"))
2219e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_ActionFields af = action.GetWidgets();
2221e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_DWORD dwFlags = action.GetFlags();
2222e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2223e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_PtrArray fieldObjects;
2224e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		af.GetAllFields(fieldObjects);
2225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_PtrArray fields;
2226e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		GetFieldFromObjects(fieldObjects, fields);
2227e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2228e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (fields.GetSize() != 0)
2229e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2230e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			FX_BOOL bIncludeOrExclude = !(dwFlags & 0x01);
2231e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_pInterForm->CheckRequiredFields(&fields, bIncludeOrExclude))
2232e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2233e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return FALSE;
2234e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2235e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return SubmitFields(sDestination, fields, bIncludeOrExclude, FALSE);
2236e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2237e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2238e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2239e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if ( m_pInterForm->CheckRequiredFields())
2240e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2241e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return FALSE;
2242e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2244e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return SubmitForm(sDestination, FALSE);
2245e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2246e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2247e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
2248e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2249e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if ( m_pInterForm->CheckRequiredFields())
2250e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2251e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return FALSE;
2252e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2253e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2254e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return SubmitForm(sDestination, FALSE);
2255e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2256e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2257e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2258e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination, const CFX_PtrArray& fields,
2259e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov									FX_BOOL bIncludeOrExclude, FX_BOOL bUrlEncoded)
2260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2261e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2262e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pEnv != NULL);
2263e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2264e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteTextBuf textBuf;
2265e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
2266e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2267e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_LPBYTE pBuffer = textBuf.GetBuffer();
2268e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_STRSIZE nBufSize = textBuf.GetLength();
2269e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2270e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bUrlEncoded)
2271e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2272e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if(!FDFToURLEncodedData(pBuffer, nBufSize))
2273e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return FALSE;
2274e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2275e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2276e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
2277e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2278e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
2279e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2280e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2281e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::DoFDFBuffer(CFX_ByteString sBuffer)
2282e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2283e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
2284e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2285e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (CFDF_Document *pFDFDocument = CFDF_Document::ParseMemory((const unsigned char *)sBuffer.GetBuffer(sBuffer.GetLength()), sBuffer.GetLength()))
2286e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2287e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Dictionary* pRootDic = pFDFDocument->GetRoot();
2288e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if(pRootDic)
2289e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2290e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_Dictionary * pFDFDict=pRootDic->GetDict("FDF");
2291e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if(pFDFDict)
2292e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2293e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPDF_Dictionary * pJSDict = pFDFDict->GetDict("JavaScript");
2294e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if(pJSDict)
2295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2296e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CFX_WideString csJS;
2297e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2298e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_Object* pJS = pJSDict->GetElementValue("Before");
2299e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (pJS != NULL)
2300e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2301e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						int iType = pJS->GetType();
2302e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (iType == PDFOBJ_STRING)
2303e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							csJS = pJSDict->GetUnicodeText("Before");
2304e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else if (iType == PDFOBJ_STREAM)
2305e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							csJS = pJS->GetUnicodeText();
2306e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2307e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2308e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2309e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2310e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2311e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		delete pFDFDocument;
2312e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2313e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2314e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	sBuffer.ReleaseBuffer();
2315e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2316e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2317e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(CFX_WideString csFDFFile, CFX_WideString csTxtFile)
2318e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2319e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
2320e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2321e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2322e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::FDFToURLEncodedData(FX_LPBYTE& pBuf, FX_STRSIZE& nBufSize)
2323e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2324e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	CFDF_Document* pFDF = CFDF_Document::ParseMemory(pBuf, nBufSize);
2325e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	if (pFDF)
2326e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	{
2327e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		CPDF_Dictionary* pMainDict = pFDF->GetRoot()->GetDict("FDF");
2328e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		if (pMainDict == NULL) return FALSE;
2329e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2330e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		// Get fields
2331e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		CPDF_Array* pFields = pMainDict->GetArray("Fields");
2332e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		if (pFields == NULL) return FALSE;
2333e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2334e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_ByteTextBuf fdfEncodedData;
2335e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2336e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		for (FX_DWORD i = 0; i < pFields->GetCount(); i ++)
2337e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		{
2338e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CPDF_Dictionary* pField = pFields->GetDict(i);
2339e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			if (pField == NULL) continue;
2340e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CFX_WideString name;
2341e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			name = pField->GetUnicodeText("T");
2342e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CFX_ByteString name_b = CFX_ByteString::FromUnicode(name);
2343e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CFX_ByteString csBValue = pField->GetString("V");
2344e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CFX_WideString csWValue = PDF_DecodeText(csBValue);
2345e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 			CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue);
2346e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2347e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fdfEncodedData = fdfEncodedData<<name_b.GetBuffer(name_b.GetLength());
2348e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov  			name_b.ReleaseBuffer();
2349e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fdfEncodedData = fdfEncodedData<<"=";
2350e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			fdfEncodedData = fdfEncodedData<<csValue_b.GetBuffer(csValue_b.GetLength());
2351e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov  			csValue_b.ReleaseBuffer();
2352e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov  			if(i != pFields->GetCount()-1)
2353e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov  				fdfEncodedData = fdfEncodedData<<"&";
2354e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 		}
2355e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2356e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		nBufSize = fdfEncodedData.GetLength();
2357e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pBuf = FX_Alloc(FX_BYTE, nBufSize);
2358e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FXSYS_memcpy(pBuf, fdfEncodedData.GetBuffer(), nBufSize);
2359e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	}
2360e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
2361e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2362e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2363e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(const CFX_PtrArray& fields,FX_BOOL bIncludeOrExclude, CFX_ByteTextBuf& textBuf)
2364e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2365e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
2366e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
2367e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2368e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath(),(CFX_PtrArray&)fields, bIncludeOrExclude);
2369e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!pFDF) return FALSE;
2370e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bRet = pFDF->WriteBuf(textBuf); // = FALSE;//
2371e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	delete pFDF;
2372e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2373e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return bRet;
2374e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2375e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2376e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(const CFX_WideString& sFileExt)
2377e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2378e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString sFileName;
2379e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return L"";
2380e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2381e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2382e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination, FX_BOOL bUrlEncoded)
2383e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2384e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 	if (sDestination.IsEmpty()) return FALSE;
2385e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2386e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDFDoc_Environment* pEnv = m_pDocument->GetEnv();
2387e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pEnv != NULL);
2388e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2389e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(NULL == m_pDocument) return FALSE;
2390e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_WideString wsPDFFilePath = m_pDocument->GetPath();
2391e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2392e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(NULL == m_pInterForm) return FALSE;
2393e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFDF_Document* pFDFDoc = m_pInterForm->ExportToFDF(wsPDFFilePath);
2394e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (NULL == pFDFDoc) return FALSE;
2395e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2396e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteTextBuf FdfBuffer;
2397e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bRet = pFDFDoc->WriteBuf(FdfBuffer);
2398e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	delete pFDFDoc;
2399e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!bRet) return FALSE;
2400e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2401e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_LPBYTE pBuffer = FdfBuffer.GetBuffer();
2402e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_STRSIZE nBufSize = FdfBuffer.GetLength();
2403e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2404e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bUrlEncoded)
2405e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if(!FDFToURLEncodedData(pBuffer, nBufSize))
2407e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return FALSE;
2408e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2409e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2410e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
2411e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2412e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (bUrlEncoded && pBuffer)
2413e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2414e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_Free(pBuffer);
2415e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		pBuffer = NULL;
2416e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2417e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2418e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return TRUE;
2419e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2420e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2421e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf)
2422e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2423e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2424e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
2425e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pDocument != NULL);
2426e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2427e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFDF_Document* pFDF = m_pInterForm->ExportToFDF(m_pDocument->GetPath());
2428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (!pFDF) return FALSE;
2429e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2430e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	FX_BOOL bRet = pFDF->WriteBuf(textBuf);
2431e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	delete pFDF;
2432e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2433e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return bRet;
2434e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2435e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2436e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2437e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action)
2438e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2439e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(action);
2440e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2441e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Dictionary* pActionDict = action.GetDict();
2442e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (pActionDict->KeyExist("Fields"))
2443e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2444e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_ActionFields af = action.GetWidgets();
2445e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_DWORD dwFlags = action.GetFlags();
2446e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2447e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_PtrArray fieldObjects;
2448e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		af.GetAllFields(fieldObjects);
2449e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_PtrArray fields;
2450e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		GetFieldFromObjects(fieldObjects, fields);
2451e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_pInterForm->ResetForm(fields, !(dwFlags & 0x01), TRUE);
2452e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2453e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2454e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_pInterForm->ResetForm(TRUE);
2455e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2456e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2457e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::DoAction_ImportData(const CPDF_Action& action)
2458e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2459e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return FALSE;
2460e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2461e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2462e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::GetFieldFromObjects(const CFX_PtrArray& objects, CFX_PtrArray& fields)
2463e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2464e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pInterForm != NULL);
2465e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2466e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int iCount = objects.GetSize();
2467e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i = 0; i < iCount; i ++)
2468e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2469e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CPDF_Object* pObject = (CPDF_Object*)objects[i];
2470e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (pObject == NULL) continue;
2471e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2472e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		int iType = pObject->GetType();
2473e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (iType == PDFOBJ_STRING)
2474e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2475e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CFX_WideString csName = pObject->GetUnicodeText();
2476e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDF_FormField* pField = m_pInterForm->GetField(0, csName);
2477e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (pField != NULL)
2478e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				fields.Add(pField);
2479e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2480e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else if (iType == PDFOBJ_DICTIONARY)
2481e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2482e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (m_pInterForm->IsValidFormField(pObject))
2483e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				fields.Add(pObject);
2484e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2485e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2487e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ----------------------------- CPDF_FormNotify ----------------------------- */
2489e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2490e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::BeforeValueChange(const CPDF_FormField* pField, CFX_WideString& csValue)
2491e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2492e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
2493e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2494e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2495e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2496e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nType = pFormField->GetFieldType();
2497e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD)
2498e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2499e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bRC = TRUE;
2500e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		OnKeyStrokeCommit(pFormField, csValue, bRC);
2501e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bRC)
2502e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2503e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			OnValidate(pFormField, csValue, bRC);
2504e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bRC)
2505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return 1;
2506e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2507e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return -1;
2508e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2509e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2510e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return -1;
2511e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2512e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
2513e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return 0;
2514e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2515e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2516e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::AfterValueChange(const CPDF_FormField* pField)
2517e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2518e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
2519e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2521e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nType = pFormField->GetFieldType();
2522e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2523e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD)
2524e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2525e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->OnCalculate(pFormField);
2526e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bFormated = FALSE;
2527e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		CFX_WideString sValue = this->OnFormat(pFormField, 0, bFormated);
2528e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bFormated)
2529e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			this->ResetFieldAppearance(pFormField, sValue.c_str(), TRUE);
2530e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2531e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			this->ResetFieldAppearance(pFormField, NULL, TRUE);
2532e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->UpdateField(pFormField);
2533e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2534e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2535e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2536e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2537e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2538e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::BeforeSelectionChange(const CPDF_FormField* pField, CFX_WideString& csValue)
2539e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2540e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
2541e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2542e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2544e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nType = pFormField->GetFieldType();
2545e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nType == FIELDTYPE_LISTBOX)
2546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2547e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		FX_BOOL bRC = TRUE;
2548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		OnKeyStrokeCommit(pFormField, csValue, bRC);
2549e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (bRC)
2550e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2551e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			OnValidate(pFormField, csValue, bRC);
2552e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (bRC)
2553e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return 1;
2554e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2555e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return -1;
2556e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2557e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		else
2558e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			return -1;
2559e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2560e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
2561e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return 0;
2562e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2563e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2564e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::AfterSelectionChange(const CPDF_FormField* pField)
2565e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2566e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
2567e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2568e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2569e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nType = pFormField->GetFieldType();
2570e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2571e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nType == FIELDTYPE_LISTBOX)
2572e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2573e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->OnCalculate(pFormField);
2574e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->ResetFieldAppearance(pFormField, NULL, TRUE);
2575e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->UpdateField(pFormField);
2576e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2577e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2578e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2579e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2580e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2581e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::AfterCheckedStatusChange(const CPDF_FormField* pField, const CFX_ByteArray& statusArray)
2582e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2583e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pField != NULL);
2584e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2585e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_FormField* pFormField = (CPDF_FormField*)pField;
2586e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	int nType = pFormField->GetFieldType();
2587e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2588e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (nType == FIELDTYPE_CHECKBOX || nType == FIELDTYPE_RADIOBUTTON)
2589e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2590e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->OnCalculate(pFormField);
2591e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		//this->ResetFieldAppearance(pFormField, NULL);
2592e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		this->UpdateField(pFormField);
2593e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2594e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2595e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2596e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2597e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2598e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::BeforeFormReset(const CPDF_InterForm* pForm)
2599e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2600e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2601e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2602e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2603e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::AfterFormReset(const CPDF_InterForm* pForm)
2604e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2605e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->OnCalculate(NULL);
2606e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2607e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2608e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2609e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2610e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::BeforeFormImportData(const CPDF_InterForm* pForm)
2611e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2612e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2613e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2614e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2615e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint	CPDFSDK_InterForm::AfterFormImportData(const CPDF_InterForm* pForm)
2616e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2617e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	this->OnCalculate(NULL);
2618e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2619e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2620e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2621e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2622e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_BOOL CPDFSDK_InterForm::IsNeedHighLight(int nFieldType)
2623e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2624e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(nFieldType <1 || nFieldType > 6)
2625e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return FALSE;
2626e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return m_bNeedHightlight[nFieldType-1];
2627e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2628e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2629e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CPDFSDK_InterForm::RemoveAllHighLight()
2630e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2631e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	memset((void*)m_bNeedHightlight, 0, 6*sizeof(FX_BOOL));
2632e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2633e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid   CPDFSDK_InterForm::SetHighlightColor(FX_COLORREF clr, int nFieldType)
2634e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2635e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(nFieldType <0 || nFieldType > 6) return;
2636e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch(nFieldType)
2637e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2638e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case 0:
2639e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2640e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			for(int i=0; i<6; i++)
2641e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2642e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_aHighlightColor[i] = clr;
2643e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				m_bNeedHightlight[i] = TRUE;
2644e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2645e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
2646e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2647e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	default:
2648e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2649e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_aHighlightColor[nFieldType-1] = clr;
2650e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			m_bNeedHightlight[nFieldType-1] = TRUE;
2651e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			break;
2652e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2653e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2654e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2655e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2656e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovFX_COLORREF CPDFSDK_InterForm::GetHighlightColor(int nFieldType)
2658e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2659e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(nFieldType <0 || nFieldType >6) return FXSYS_RGB(255,255,255);
2660e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if(nFieldType == 0)
2661e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_aHighlightColor[0];
2662e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
2663e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_aHighlightColor[nFieldType-1];
2664e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2665e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2666e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov/* ------------------------- CBA_AnnotIterator ------------------------- */
2667e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2668e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCBA_AnnotIterator::CBA_AnnotIterator(CPDFSDK_PageView* pPageView, const CFX_ByteString& sType, const CFX_ByteString& sSubType)
2669e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	:m_pPageView(pPageView),
2670e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_sType(sType),
2671e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_sSubType(sSubType),
2672e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_nTabs(BAI_STRUCTURE)
2673e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2674e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pPageView != NULL);
2675e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2676e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Page* pPDFPage = m_pPageView->GetPDFPage();
2677e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pPDFPage != NULL);
2678e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pPDFPage->m_pFormDict != NULL);
2679e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2680e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetString("Tabs");
2681e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2682e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (sTabs == "R")
2683e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2684e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nTabs = BAI_ROW;
2685e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2686e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else if (sTabs == "C")
2687e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2688e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nTabs = BAI_COLUMN;
2689e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2690e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	else
2691e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2692e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		m_nTabs = BAI_STRUCTURE;
2693e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2694e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2695e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	GenerateResults();
2696e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2697e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2698e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCBA_AnnotIterator::~CBA_AnnotIterator()
2699e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2700e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	m_Annots.RemoveAll();
2701e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2702e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2703e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Annot* CBA_AnnotIterator::GetFirstAnnot()
2704e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2705e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_Annots.GetSize() > 0)
2706e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_Annots[0];
2707e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2708e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
2709e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2710e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2711e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Annot* CBA_AnnotIterator::GetLastAnnot()
2712e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2713e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (m_Annots.GetSize() > 0)
2714e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return m_Annots[m_Annots.GetSize() - 1];
2715e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2716e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
2717e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2718e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2719e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Annot* CBA_AnnotIterator::GetNextAnnot(CPDFSDK_Annot* pAnnot)
2720e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2721e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=m_Annots.GetSize(); i<sz; i++)
2722e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2723e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_Annots[i] == pAnnot)
2724e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2725e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (i+1 < sz)
2726e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return m_Annots[i+1];
2727e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2728e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return m_Annots[0];
2729e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2730e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2731e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2732e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
2733e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2734e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2735e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDFSDK_Annot* CBA_AnnotIterator::GetPrevAnnot(CPDFSDK_Annot* pAnnot)
2736e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2737e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	for (int i=0,sz=m_Annots.GetSize(); i<sz; i++)
2738e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		if (m_Annots[i] == pAnnot)
2740e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2741e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (i-1 >= 0)
2742e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return m_Annots[i-1];
2743e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			else
2744e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				return m_Annots[sz-1];
2745e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2746e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2747e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2748e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return NULL;
2749e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2750e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2751e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint CBA_AnnotIterator::CompareByLeft(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2)
2752e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2753e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(p1 != NULL);
2754e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(p2 != NULL);
2755e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2756e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
2757e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
2758e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2759e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (rcAnnot1.left < rcAnnot2.left)
2760e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return -1;
2761e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (rcAnnot1.left > rcAnnot2.left)
2762e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return 1;
2763e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2764e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2765e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2766e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2767e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovint CBA_AnnotIterator::CompareByTop(CPDFSDK_Annot* p1, CPDFSDK_Annot* p2)
2768e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2769e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(p1 != NULL);
2770e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(p2 != NULL);
2771e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2772e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcAnnot1 = GetAnnotRect(p1);
2773e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcAnnot2 = GetAnnotRect(p2);
2774e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2775e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (rcAnnot1.top < rcAnnot2.top)
2776e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return -1;
2777e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	if (rcAnnot1.top > rcAnnot2.top)
2778e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		return 1;
2779e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return 0;
2780e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2781e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2782e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganovvoid CBA_AnnotIterator::GenerateResults()
2783e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2784e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(m_pPageView != NULL);
2785e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2786e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	switch (m_nTabs)
2787e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	{
2788e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BAI_STRUCTURE:
2789e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2790e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			for (int i=0,sz=m_pPageView->CountAnnots(); i<sz; i++)
2791e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2792e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
2793e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				ASSERT(pAnnot != NULL);
2794e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2795e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (pAnnot->GetType() == m_sType
2796e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					&& pAnnot->GetSubType() == m_sSubType)
2797e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_Annots.Add(pAnnot);
2798e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2799e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2800e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2801e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BAI_ROW:
2802e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2803e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFSDK_SortAnnots sa;
2804e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2805e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2806e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2807e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				for (int i=0,sz=m_pPageView->CountAnnots(); i<sz; i++)
2808e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2809e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
2810e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ASSERT(pAnnot != NULL);
2811e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2812e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (pAnnot->GetType() == m_sType
2813e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						&& pAnnot->GetSubType() == m_sSubType)
2814e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						sa.Add(pAnnot);
2815e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2816e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2817e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2818e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (sa.GetSize() > 0)
2819e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2820e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sa.Sort(CBA_AnnotIterator::CompareByLeft);
2821e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2822e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2823e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			while (sa.GetSize() > 0)
2824e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2825e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				int nLeftTopIndex = -1;
2826e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2827e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2828e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					FX_FLOAT fTop = 0.0f;
2829e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2830e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					for (int i=sa.GetSize()-1; i>=0; i--)
2831e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2833e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						ASSERT(pAnnot != NULL);
2834e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2836e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2837e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (rcAnnot.top > fTop)
2838e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2839e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							nLeftTopIndex = i;
2840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							fTop = rcAnnot.top;
2841e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2842e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2843e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2845e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (nLeftTopIndex >= 0)
2846e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2847e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
2848e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ASSERT(pLeftTopAnnot != NULL);
2849e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2850e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
2851e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2852e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_Annots.Add(pLeftTopAnnot);
2853e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					sa.RemoveAt(nLeftTopIndex);
2854e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2855e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CFX_ArrayTemplate<int> aSelect;
2856e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2857e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2858e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (int i=0,sz=sa.GetSize(); i<sz; i++)
2859e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2860e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2861e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							ASSERT(pAnnot != NULL);
2862e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2863e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2864e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2865e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							FX_FLOAT fCenterY = (rcAnnot.top + rcAnnot.bottom) / 2.0f;
2866e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2867e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (fCenterY > rcLeftTop.bottom && fCenterY < rcLeftTop.top)
2868e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								aSelect.Add(i);
2869e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2870e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2871e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2872e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2873e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (int i=0,sz=aSelect.GetSize(); i<sz; i++)
2874e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2875e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							m_Annots.Add(sa[aSelect[i]]);
2876e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2877e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2878e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2879e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2880e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (int i=aSelect.GetSize()-1; i>=0; i--)
2881e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2882e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							sa.RemoveAt(aSelect[i]);
2883e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2884e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2885e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2886e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					aSelect.RemoveAll();
2887e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2888e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2889e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sa.RemoveAll();
2890e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2891e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2892e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	case BAI_COLUMN:
2893e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		{
2894e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			CPDFSDK_SortAnnots sa;
2895e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2896e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2897e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				for (int i=0,sz=m_pPageView->CountAnnots(); i<sz; i++)
2898e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2899e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDFSDK_Annot* pAnnot = m_pPageView->GetAnnot(i);
2900e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ASSERT(pAnnot != NULL);
2901e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2902e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					if (pAnnot->GetType() == m_sType
2903e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						&& pAnnot->GetSubType() == m_sSubType)
2904e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						sa.Add(pAnnot);
2905e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2906e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2907e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2908e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			if (sa.GetSize() > 0)
2909e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2910e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				sa.Sort(CBA_AnnotIterator::CompareByTop, FALSE);
2911e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2912e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2913e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			while (sa.GetSize() > 0)
2914e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			{
2915e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				int nLeftTopIndex = -1;
2916e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2917e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2918e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					FX_FLOAT fLeft = -1.0f;
2919e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2920e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					for (int i=sa.GetSize()-1; i>=0; i--)
2921e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2922e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2923e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						ASSERT(pAnnot != NULL);
2924e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2925e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2926e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2927e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						if (fLeft < 0)
2928e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2929e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							nLeftTopIndex = 0;
2930e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							fLeft = rcAnnot.left;
2931e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2932e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						else if (rcAnnot.left < fLeft)
2933e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2934e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							nLeftTopIndex = i;
2935e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							fLeft = rcAnnot.left;
2936e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2937e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2938e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2939e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2940e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				if (nLeftTopIndex >= 0)
2941e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				{
2942e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDFSDK_Annot* pLeftTopAnnot = sa.GetAt(nLeftTopIndex);
2943e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					ASSERT(pLeftTopAnnot != NULL);
2944e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2945e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CPDF_Rect rcLeftTop = GetAnnotRect(pLeftTopAnnot);
2946e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2947e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					m_Annots.Add(pLeftTopAnnot);
2948e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					sa.RemoveAt(nLeftTopIndex);
2949e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2950e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					CFX_ArrayTemplate<int> aSelect;
2951e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2952e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2953e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (int i=0,sz=sa.GetSize(); i<sz; i++)
2954e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2955e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CPDFSDK_Annot* pAnnot = sa.GetAt(i);
2956e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							ASSERT(pAnnot != NULL);
2957e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2958e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							CPDF_Rect rcAnnot = GetAnnotRect(pAnnot);
2959e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2960e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							FX_FLOAT fCenterX = (rcAnnot.left + rcAnnot.right) / 2.0f;
2961e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2962e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							if (fCenterX > rcLeftTop.left && fCenterX < rcLeftTop.right)
2963e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov								aSelect.Add(i);
2964e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2965e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2966e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2967e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2968e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (int i=0,sz=aSelect.GetSize(); i<sz; i++)
2969e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2970e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							m_Annots.Add(sa[aSelect[i]]);
2971e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2972e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2973e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2974e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					{
2975e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						for (int i=aSelect.GetSize()-1; i>=0; i--)
2976e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						{
2977e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov							sa.RemoveAt(aSelect[i]);
2978e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov						}
2979e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					}
2980e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2981e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov					aSelect.RemoveAll();
2982e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov				}
2983e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			}
2984e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov			sa.RemoveAll();
2985e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		}
2986e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov		break;
2987e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	}
2988e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
2989e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2990e6986e1e8d4a57987f47c215490cb080a65ee29aSvet GanovCPDF_Rect CBA_AnnotIterator::GetAnnotRect(CPDFSDK_Annot* pAnnot)
2991e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov{
2992e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pAnnot != NULL);
2993e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2994e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Annot* pPDFAnnot = pAnnot->GetPDFAnnot();
2995e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	ASSERT(pPDFAnnot != NULL);
2996e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
2997e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	CPDF_Rect rcAnnot;
2998e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	pPDFAnnot->GetRect(rcAnnot);
2999e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3000e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov	return rcAnnot;
3001e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}
3002e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov
3003