1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_define.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_mgr.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_baseannot.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//								CPDFSDK_DateTime
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint _gAfxGetTimeZoneInSeconds(FX_CHAR tzhour, FX_BYTE tzminute)
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return (int)tzhour * 3600 + (int)tzminute * (tzhour >= 0 ? 60 : -60);
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL _gAfxIsLeapYear(FX_SHORT year)
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)));
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_WORD _gAfxGetYearDays(FX_SHORT year)
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return (_gAfxIsLeapYear(year) == TRUE ? 366 : 365);
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BYTE _gAfxGetMonthDays(FX_SHORT year, FX_BYTE month)
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE	mDays;
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (month)
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 1:
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 3:
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 5:
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 7:
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 8:
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 10:
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 12:
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		mDays = 31;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 4:
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 6:
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 9:
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 11:
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		mDays = 30;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case 2:
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (_gAfxIsLeapYear(year) == TRUE)
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			mDays = 29;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			mDays = 28;
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	default:
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		mDays = 0;
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return mDays;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime::CPDFSDK_DateTime()
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ResetDateTime();
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr)
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ResetDateTime();
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FromPDFDateTimeString(dtStr);
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime::CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime)
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	operator = (datetime);
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime::CPDFSDK_DateTime(const FX_SYSTEMTIME& st)
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	operator = (st) ;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_DateTime::ResetDateTime()
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	tzset();
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	time_t	curTime;
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	time(&curTime);
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	struct tm* newtime;
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//newtime = gmtime(&curTime);
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime = localtime(&curTime);
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.year = newtime->tm_year + 1900;
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.month = newtime->tm_mon + 1;
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.day = newtime->tm_mday;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.hour = newtime->tm_hour;
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.minute = newtime->tm_min;
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.second = newtime->tm_sec;
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	dt.tzHour = _timezone / 3600 * -1;
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	dt.tzMinute = (abs(_timezone) % 3600) / 60;
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const CPDFSDK_DateTime& datetime)
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FXSYS_memcpy(&dt, &datetime.dt, sizeof(FX_DATETIME));
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return *this;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime& CPDFSDK_DateTime::operator = (const FX_SYSTEMTIME& st)
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	tzset();
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.year = (FX_SHORT)st.wYear;
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.month = (FX_BYTE)st.wMonth;
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.day = (FX_BYTE)st.wDay;
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.hour = (FX_BYTE)st.wHour;
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.minute = (FX_BYTE)st.wMinute;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.second = (FX_BYTE)st.wSecond;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	dt.tzHour = _timezone / 3600 * -1;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	dt.tzMinute = (abs(_timezone) % 3600) / 60;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return *this;
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_DateTime::operator == (CPDFSDK_DateTime& datetime)
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) == 0);
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_DateTime::operator != (CPDFSDK_DateTime& datetime)
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return (FXSYS_memcmp(&dt, &datetime.dt, sizeof(FX_DATETIME)) != 0);
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_DateTime::operator > (CPDFSDK_DateTime& datetime)
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt1 = ToGMT();
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt2 = datetime.ToGMT();
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d1 > d3) return TRUE;
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d2 > d4) return TRUE;
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_DateTime::operator >= (CPDFSDK_DateTime& datetime)
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt1 = ToGMT();
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt2 = datetime.ToGMT();
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d1 >= d3) return TRUE;
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d2 >= d4) return TRUE;
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_DateTime::operator < (CPDFSDK_DateTime& datetime)
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt1 = ToGMT();
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt2 = datetime.ToGMT();
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d1 < d3) return TRUE;
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d2 < d4) return TRUE;
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_DateTime::operator <= (CPDFSDK_DateTime& datetime)
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt1 = ToGMT();
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt2 = datetime.ToGMT();
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d1 = (((int)dt1.dt.year) << 16) | (((int)dt1.dt.month) << 8) | (int)dt1.dt.day;
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d2 = (((int)dt1.dt.hour) << 16) | (((int)dt1.dt.minute) << 8) | (int)dt1.dt.second;
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d3 = (((int)dt2.dt.year) << 16) | (((int)dt2.dt.month) << 8) | (int)dt2.dt.day;
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int d4 = (((int)dt2.dt.hour) << 16) | (((int)dt2.dt.minute) << 8) | (int)dt2.dt.second;
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d1 <= d3) return TRUE;
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (d2 <= d4) return TRUE;
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime::operator time_t()
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	struct tm newtime;
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime.tm_year = dt.year - 1900;
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime.tm_mon = dt.month - 1;
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime.tm_mday = dt.day;
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime.tm_hour = dt.hour;
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime.tm_min = dt.minute;
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	newtime.tm_sec = dt.second;
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return mktime(&newtime);
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(const CFX_ByteString& dtStr)
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int strLength = dtStr.GetLength();
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (strLength > 0)
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int i = 0;
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int j, k;
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_CHAR ch;
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength)
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch >= '0' && ch <= '9') break;
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength) return *this;
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 4)
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.year = (FX_SHORT)k;
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 4) return *this;
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.month = (FX_BYTE)k;
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.day = (FX_BYTE)k;
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.hour = (FX_BYTE)k;
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.minute = (FX_BYTE)k;
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.second = (FX_BYTE)k;
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ch = dtStr[i ++];
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (ch != '-' && ch != '+') return *this;
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (ch == '-')
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			dt.tzHour = -1;
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			dt.tzHour = 1;
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.tzHour *= (FX_CHAR)k;
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ch = dtStr[i ++];
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (ch != '\'') return *this;
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		j = 0;
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		k = 0;
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (i < strLength && j < 2)
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ch = dtStr[i];
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			k = k * 10 + ch - '0';
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			j ++;
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (ch < '0' || ch > '9') break;
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			i ++;
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dt.tzMinute = (FX_BYTE)k;
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i >= strLength || j < 2) return *this;
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return  *this;
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString()
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString str1;
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	str1.Format("%04d-%02d-%02d %02d:%02d:%02d ", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (dt.tzHour < 0)
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		str1 += "-";
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		str1 += "+";
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString str2;
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	str2.Format("%02d:%02d", abs(dt.tzHour), dt.tzMinute);
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return str1 + str2;
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString()
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString dtStr;
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	char tempStr[32];
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sprintf(tempStr, "D:%04d%02d%02d%02d%02d%02d", dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second);
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dtStr = CFX_ByteString(tempStr);
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (dt.tzHour < 0)
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dtStr += CFX_ByteString("-");
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		dtStr += CFX_ByteString("+");
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sprintf(tempStr, "%02d'%02d'", abs(dt.tzHour), dt.tzMinute);
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dtStr += CFX_ByteString(tempStr);
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return dtStr;
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_DateTime::ToSystemTime(FX_SYSTEMTIME& st)
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt = *this;
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	time_t t = (time_t)dt;
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	struct tm* pTime = localtime(&t);
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pTime){
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wYear = (FX_WORD)pTime->tm_year + 1900;
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wMonth = (FX_WORD)pTime->tm_mon + 1;
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wDay = (FX_WORD)pTime->tm_mday;
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wDayOfWeek = (FX_WORD)pTime->tm_wday;
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wHour = (FX_WORD)pTime->tm_hour;
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wMinute = (FX_WORD)pTime->tm_min;
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wSecond = (FX_WORD)pTime->tm_sec;
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		st.wMilliseconds = 0;
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime CPDFSDK_DateTime::ToGMT()
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt = *this;
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.AddSeconds(-_gAfxGetTimeZoneInSeconds(dt.dt.tzHour, dt.dt.tzMinute));
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.dt.tzHour = 0;
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.dt.tzMinute = 0;
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return dt;
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime& CPDFSDK_DateTime::AddDays(short days)
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (days == 0) return *this;
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_SHORT	y = dt.year, yy;
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE		m = dt.month;
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BYTE		d = dt.day;
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int			mdays, ydays, ldays;
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ldays = days;
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (ldays > 0)
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		yy = y;
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (((FX_WORD)m * 100 + d) > 300) yy ++;
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ydays = _gAfxGetYearDays(yy);
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (ldays >= ydays)
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			y ++;
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ldays -= ydays;
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			yy ++;
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			mdays = _gAfxGetMonthDays(y, m);
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (d > mdays)
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m ++;
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				d -= mdays;
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ydays = _gAfxGetYearDays(yy);
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		mdays = _gAfxGetMonthDays(y, m) - d + 1;
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (ldays >= mdays)
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ldays -= mdays;
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m ++;
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			d = 1;
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			mdays = _gAfxGetMonthDays(y, m);
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		d += ldays;
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ldays *= -1;
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		yy = y;
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (((FX_WORD)m * 100 + d) < 300) yy --;
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ydays = _gAfxGetYearDays(yy);
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (ldays >= ydays)
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			y --;
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ldays -= ydays;
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			yy --;
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			mdays = _gAfxGetMonthDays(y, m);
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (d > mdays)
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m ++;
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				d -= mdays;
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ydays = _gAfxGetYearDays(yy);
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		while (ldays >= d)
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ldays -= d;
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m --;
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			mdays = _gAfxGetMonthDays(y, m);
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			d = mdays;
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		d -= ldays;
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.year = y;
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.month = m;
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.day = d;
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return *this;
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
471ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_DateTime& CPDFSDK_DateTime::AddSeconds(int seconds)
472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
473ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (seconds == 0) return *this;
474ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
475ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int	n;
476ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int	days;
477ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
478ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	n = dt.hour * 3600 + dt.minute * 60 + dt.second + seconds;
479ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (n < 0)
480ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
481ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		days = (n - 86399) / 86400;
482ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		n -= days * 86400;
483ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
484ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
485ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
486ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		days = n / 86400;
487ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		n %= 86400;
488ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
489ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.hour = (FX_BYTE)(n / 3600);
490ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.hour %= 24;
491ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	n %= 3600;
492ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.minute = (FX_BYTE)(n / 60);
493ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	dt.second = (FX_BYTE)(n % 60);
494ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (days != 0) AddDays(days);
495ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
496ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return *this;
497ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
498ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
499ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
500ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------
501ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//								CPDFSDK_Annot
502ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//---------------------------------------------------------------------------
503ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_Annot::CPDFSDK_Annot(CPDF_Annot* pAnnot, CPDFSDK_PageView* pPageView) :
504ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovm_pAnnot(pAnnot),
505ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovm_pPageView(pPageView),
506ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovm_bSelected(FALSE),
507ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovm_nTabOrder(-1)
508ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
509ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
510ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
511ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_Annot::~CPDFSDK_Annot()
512ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
513ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot = NULL;
514ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pPageView = NULL;
515ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
516ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
517ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Annot*	CPDFSDK_Annot::GetPDFAnnot()
518ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
519ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot;
520ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
521ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
522ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_DWORD CPDFSDK_Annot::GetFlags()
523ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
524ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
525ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
526ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->GetFlags();
527ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
528ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
529ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetPage(CPDFSDK_PageView* pPageView)
530ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
531ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pPageView = pPageView;
532ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
533ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
534ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_PageView* CPDFSDK_Annot::GetPageView()
535ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
536ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pPageView;
537ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
538ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
539ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_Annot::IsSelected()
540ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
541ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_bSelected;
542ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
543ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
544ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetSelected(FX_BOOL bSelected)
545ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
546ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bSelected = bSelected;
547ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
548ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
549ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Tab Order
550ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDFSDK_Annot::GetTabOrder()
551ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
552ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_nTabOrder;
553ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetTabOrder(int iTabOrder)
556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_nTabOrder = iTabOrder;
558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
559ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
560ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Dictionary* CPDFSDK_Annot::GetAnnotDict() const
561ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
563ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
564ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict;
565ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
566ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
567ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetRect(const CPDF_Rect& rect)
568ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
569ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
570ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
571ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(rect.right - rect.left >= GetMinWidth());
572ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(rect.top - rect.bottom >= GetMinHeight());
573ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
574ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->SetAtRect("Rect", rect);
575ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
576ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
577ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Rect CPDFSDK_Annot::GetRect() const
578ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
579ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
580ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
581ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Rect rect;
582ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->GetRect(rect);
583ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
584ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return rect;
585ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
586ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
587ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDFSDK_Annot::GetType() const
588ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
589ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
590ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
591ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->GetSubType();
592ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
593ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
594ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDFSDK_Annot::GetSubType() const
595ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
596ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return "";
597ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
598ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
599ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::ResetAppearance()
600ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
601ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(FALSE);
602ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
603ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
604ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::DrawAppearance(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								   CPDF_Annot::AppearanceMode mode, const CPDF_RenderOptions* pOptions)
606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
607ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pPageView != NULL);
608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
609ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
610ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, mode, pOptions);
611ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
612ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
613ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPDFSDK_Annot::IsAppearanceValid()
614ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
615ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
616ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
617ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
618ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetDict("AP") != NULL;
619ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
620ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
621ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPDFSDK_Annot::IsAppearanceValid(CPDF_Annot::AppearanceMode mode)
622ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
623ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
624ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
625ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
626ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pAP = m_pAnnot->m_pAnnotDict->GetDict("AP");
627ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pAP == NULL) return FALSE;
628ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
629ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	// Choose the right sub-ap
630ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	const FX_CHAR* ap_entry = "N";
631ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (mode == CPDF_Annot::Down)
632ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ap_entry = "D";
633ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (mode == CPDF_Annot::Rollover)
634ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ap_entry = "R";
635ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pAP->KeyExist(ap_entry))
636ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ap_entry = "N";
637ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
638ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	// Get the AP stream or subdirectory
639ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Object* psub = pAP->GetElementValue(ap_entry);
640ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (psub == NULL) return FALSE;
641ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
642ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
643ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
644ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
645ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::DrawBorder(CFX_RenderDevice* pDevice, const CPDF_Matrix* pUser2Device,
646ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						   const CPDF_RenderOptions* pOptions)
647ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
648ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
649ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->DrawBorder(pDevice, pUser2Device, pOptions);
650ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
651ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
652ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::ClearCachedAP()
653ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
654ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
655ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->ClearCachedAP();
656ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
657ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
658ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetContents(const CFX_WideString& sContents)
659ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
660ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
661ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
662ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
663ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sContents.IsEmpty())
664ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->RemoveAt("Contents");
665ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
666ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAtString("Contents", PDF_EncodeText(sContents));
667ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
668ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
669ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPDFSDK_Annot::GetContents() const
670ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
671ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
672ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
673ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
674ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetUnicodeText("Contents");
675ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
676ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
677ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetAnnotName(const CFX_WideString& sName)
678ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
679ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
680ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
681ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
682ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sName.IsEmpty())
683ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->RemoveAt("NM");
684ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
685ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAtString("NM", PDF_EncodeText(sName));
686ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
687ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
688ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString CPDFSDK_Annot::GetAnnotName() const
689ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
690ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
691ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
692ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
693ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetUnicodeText("NM");
694ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
695ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
696ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetModifiedDate(const FX_SYSTEMTIME& st)
697ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
698ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
699ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
700ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
701ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_DateTime dt(st);
702ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString str = dt.ToPDFDateTimeString();
703ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
704ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (str.IsEmpty())
705ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->RemoveAt("M");
706ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
707ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAtString("M", str);
708ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
709ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
710ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_SYSTEMTIME CPDFSDK_Annot::GetModifiedDate() const
711ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
712ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
713ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
714ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
715ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_SYSTEMTIME systime;
716ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_ByteString str = m_pAnnot->m_pAnnotDict->GetString("M");
717ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
718ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	CPDFSDK_DateTime dt(str);
719ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	dt.ToSystemTime(systime);
720ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
721ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return systime;
722ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
723ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
724ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetFlags(int nFlags)
725ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
726ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
727ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
728ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
729ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->SetAtInteger("F", nFlags);
730ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
731ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
732ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CPDFSDK_Annot::GetFlags() const
733ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
734ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
735ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetInteger("F");
738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
740ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetAppState(const CFX_ByteString& str)
741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
742ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
743ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
744ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (str.IsEmpty())
746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->RemoveAt("AS");
747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAtString("AS", str);
749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
750ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
751ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_ByteString CPDFSDK_Annot::GetAppState() const
752ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
753ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
754ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
755ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
756ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetString("AS");
757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
758ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
759ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetStructParent(int key)
760ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
761ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
762ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
763ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
764ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->SetAtInteger("StructParent", key);
765ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
766ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
767ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	CPDFSDK_Annot::GetStructParent() const
768ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
769ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
770ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
771ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
772ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetInteger("StructParent");
773ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
774ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
775ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//border
776ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetBorderWidth(int nWidth)
777ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
778ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
779ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
780ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
781ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
782ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
783ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pBorder)
784ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
785ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBorder->SetAt(2, FX_NEW CPDF_Number(nWidth));
786ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
787ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
788ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
789ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
790ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
791ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!pBSDict)
792ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
793ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pBSDict = FX_NEW CPDF_Dictionary;
794ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pAnnot->m_pAnnotDict->SetAt("BS", pBSDict);
795ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
796ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
797ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict->SetAtInteger("W", nWidth);
798ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
799ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
800ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
801ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	CPDFSDK_Annot::GetBorderWidth() const
802ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
803ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
804ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
805ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
806ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
807ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
808ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pBorder)
809ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
810ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return pBorder->GetInteger(2);
811ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
812ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
813ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
814ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
815ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
816ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pBSDict)
817ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
818ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return pBSDict->GetInteger("W", 1);
819ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
820ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
821ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return 1;
822ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
823ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
824ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetBorderStyle(int nStyle)
825ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
826ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
827ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
828ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
829ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
830ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pBSDict)
831ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
832ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict = FX_NEW CPDF_Dictionary;
833ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAt("BS", pBSDict);
834ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
835ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
836ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	switch (nStyle)
837ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
838ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case BBS_SOLID:
839ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict->SetAtName("S", "S");
840ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
841ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case BBS_DASH:
842ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict->SetAtName("S", "D");
843ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
844ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case BBS_BEVELED:
845ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict->SetAtName("S", "B");
846ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
847ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case BBS_INSET:
848ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict->SetAtName("S", "I");
849ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
850ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	case BBS_UNDERLINE:
851ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict->SetAtName("S", "U");
852ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		break;
853ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
854ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
855ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
856ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint	CPDFSDK_Annot::GetBorderStyle() const
857ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
858ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
859ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
860ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
861ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
862ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pBSDict)
863ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
864ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CFX_ByteString sBorderStyle = pBSDict->GetString("S", "S");
865ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sBorderStyle == "S") return BBS_SOLID;
866ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sBorderStyle == "D") return BBS_DASH;
867ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sBorderStyle == "B") return BBS_BEVELED;
868ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sBorderStyle == "I") return BBS_INSET;
869ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (sBorderStyle == "U") return BBS_UNDERLINE;
870ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
871ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
872ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
873ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pBorder)
874ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
875ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pBorder->GetCount() >= 4)
876ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
877ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Array *pDP = pBorder->GetArray(3);
878ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (pDP && pDP->GetCount() > 0)
879ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				return BBS_DASH;
880ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
881ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
882ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
883ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return BBS_SOLID;
884ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
885ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
886ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetBorderDash(const CFX_IntArray& array)
887ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
888ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
889ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
890ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
891ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
892ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pBSDict)
893ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
894ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pBSDict = FX_NEW CPDF_Dictionary;
895ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAt("BS", pBSDict);
896ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
897ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
898ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pArray = FX_NEW CPDF_Array;
899ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0,sz=array.GetSize(); i<sz; i++)
900ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
901ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pArray->AddInteger(array[i]);
902ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
903ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
904ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pBSDict->SetAt("D", pArray);
905ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
906ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
907ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::GetBorderDash(CFX_IntArray& array) const
908ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
909ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
910ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
911ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
912ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pDash = NULL;
913ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
914ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pBorder = m_pAnnot->m_pAnnotDict->GetArray("Border");
915ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pBorder)
916ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
917ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDash = pBorder->GetArray(3);
918ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
919ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
920ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
921ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Dictionary* pBSDict = m_pAnnot->m_pAnnotDict->GetDict("BS");
922ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pBSDict)
923ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
924ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pDash = pBSDict->GetArray("D");
925ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
926ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
927ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
928ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pDash)
929ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
930ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0,sz=pDash->GetCount(); i<sz; i++)
931ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
932ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			array.Add(pDash->GetInteger(i));
933ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
934ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
935ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
936ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
937ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetColor(FX_COLORREF color)
938ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
939ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
940ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
941ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
942ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Array* pArray = FX_NEW CPDF_Array;
943ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pArray->AddNumber((FX_FLOAT)FXSYS_GetRValue(color) / 255.0f);
944ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pArray->AddNumber((FX_FLOAT)FXSYS_GetGValue(color) / 255.0f);
945ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pArray->AddNumber((FX_FLOAT)FXSYS_GetBValue(color) / 255.0f);
946ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->SetAt("C", pArray);
947ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
948ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
949ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::RemoveColor()
950ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
951ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
952ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
953ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
954ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->RemoveAt("C") ;
955ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
956ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
957ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_Annot::GetColor(FX_COLORREF& color) const
958ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
959ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
960ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
961ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
962ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CPDF_Array* pEntry = m_pAnnot->m_pAnnotDict->GetArray("C"))
963ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
964ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int nCount = pEntry->GetCount();
965ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (nCount == 1)
966ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
967ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT g = pEntry->GetNumber(0) * 255;
968ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
969ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			color = FXSYS_RGB((int)g, (int)g, (int)g);
970ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
971ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
972ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
973ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (nCount == 3)
974ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
975ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT r = pEntry->GetNumber(0) * 255;
976ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT g = pEntry->GetNumber(1) * 255;
977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT b = pEntry->GetNumber(2) * 255;
978ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
979ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			color = FXSYS_RGB((int)r, (int)g, (int)b);
980ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
981ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
982ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
983ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else if (nCount == 4)
984ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
985ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT c = pEntry->GetNumber(0);
986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT m = pEntry->GetNumber(1);
987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT y = pEntry->GetNumber(2);
988ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT k = pEntry->GetNumber(3);
989ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
990ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT r = 1.0f - FX_MIN(1.0f, c + k);
991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT g = 1.0f - FX_MIN(1.0f, m + k);
992ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			FX_FLOAT b = 1.0f - FX_MIN(1.0f, y + k);
993ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
994ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			color = FXSYS_RGB((int)(r * 255), (int)(g * 255), (int)(b * 255));
995ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
996ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return TRUE;
997ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
998ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
999ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1000ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FALSE;
1001ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1002ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1003ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1004ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::WriteAppearance(const CFX_ByteString& sAPType, const CPDF_Rect& rcBBox,
1005ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								const CPDF_Matrix& matrix, const CFX_ByteString& sContents,
1006ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov								const CFX_ByteString& sAPState)
1007ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1008ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1009ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pAPDict = m_pAnnot->m_pAnnotDict->GetDict("AP");
1012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pAPDict)
1014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1015ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pAPDict = FX_NEW CPDF_Dictionary;
1016ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAt("AP", pAPDict);
1017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1018ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1019ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Stream* pStream = NULL;
1020ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary* pParentDict = NULL;
1021ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1022ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sAPState.IsEmpty())
1023ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1024ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParentDict = pAPDict;
1025ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStream = pAPDict->GetStream(sAPType);
1026ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1027ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
1028ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1029ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Dictionary* pAPTypeDict = pAPDict->GetDict(sAPType);
1030ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!pAPTypeDict)
1031ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
1032ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pAPTypeDict = FX_NEW CPDF_Dictionary;
1033ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pAPDict->SetAt(sAPType, pAPTypeDict);
1034ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
1035ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1036ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParentDict = pAPTypeDict;
1037ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStream = pAPTypeDict->GetStream(sAPState);
1038ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1039ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pStream)
1041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(m_pPageView != NULL);
1043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
1044ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pDoc != NULL);
1045ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1046ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStream = FX_NEW CPDF_Stream(NULL, 0, NULL);
1047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_INT32 objnum = pDoc->AddIndirectObject(pStream);
1048ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//pAPDict->SetAtReference(sAPType, pDoc, objnum);
1049ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pParentDict != NULL);
1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pParentDict->SetAtReference(sAPType, pDoc, objnum);
1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1052ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1053ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Dictionary * pStreamDict = pStream->GetDict();
1054ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1055ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pStreamDict)
1056ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1057ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStreamDict = FX_NEW CPDF_Dictionary;
1058ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStreamDict->SetAtName("Type", "XObject");
1059ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStreamDict->SetAtName("Subtype", "Form");
1060ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStreamDict->SetAtInteger("FormType", 1);
1061ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStream->InitStream(NULL,0,pStreamDict);
1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1063ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1064ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pStreamDict)
1065ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1066ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStreamDict->SetAtMatrix("Matrix",matrix);
1067ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pStreamDict->SetAtRect("BBox", rcBBox);
1068ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1070ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pStream->SetData((FX_BYTE*)(FX_LPCSTR)sContents, sContents.GetLength(), FALSE, FALSE);
1071ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define BA_ANNOT_MINWIDTH			1
1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define BA_ANNOT_MINHEIGHT			1
1075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1076ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPDFSDK_Annot::GetMinWidth() const
1077ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1078ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return BA_ANNOT_MINWIDTH;
1079ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1080ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1081ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_FLOAT CPDFSDK_Annot::GetMinHeight() const
1082ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1083ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return BA_ANNOT_MINHEIGHT;
1084ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1085ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1086ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CPDFSDK_Annot::CreateFormFiller()
1087ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1088ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
1089ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1090ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CPDFSDK_Annot::IsVisible() const
1091ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1092ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nFlags = GetFlags();
1093ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return !((nFlags & ANNOTFLAG_INVISIBLE) || (nFlags & ANNOTFLAG_HIDDEN) || (nFlags & ANNOTFLAG_NOVIEW));
1094ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1096ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Action CPDFSDK_Annot::GetAction() const
1097ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1098ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1099ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetDict("A");
1102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetAction(const CPDF_Action& action)
1105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(action != NULL);
1110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if ((CPDF_Action&)action != m_pAnnot->m_pAnnotDict->GetDict("A"))
1112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Document* pDoc = m_pPageView->GetPDFDocument();
1114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pDoc != NULL);
1115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (action.m_pDict && (action.m_pDict->GetObjNum() == 0))
1117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pDoc->AddIndirectObject(action.m_pDict);
1118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAtReference("A", pDoc, action.m_pDict->GetObjNum());
1119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::RemoveAction()
1123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->RemoveAt("A");
1128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_AAction CPDFSDK_Annot::GetAAction() const
1131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_pAnnot->m_pAnnotDict->GetDict("AA");
1136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::SetAAction(const CPDF_AAction& aa)
1139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(aa != NULL);
1143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if ((CPDF_AAction&)aa != m_pAnnot->m_pAnnotDict->GetDict("AA"))
1145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pAnnot->m_pAnnotDict->SetAt("AA", (CPDF_AAction&)aa);
1146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CPDFSDK_Annot::RemoveAAction()
1149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot != NULL);
1151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(m_pAnnot->m_pAnnotDict != NULL);
1152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->m_pAnnotDict->RemoveAt("AA");
1154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1156ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Action	CPDFSDK_Annot::GetAAction(CPDF_AAction::AActionType eAAT)
1157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_AAction AAction = GetAAction();
1159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (AAction.ActionExist(eAAT))
1161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return AAction.GetAction(eAAT);
1163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (eAAT == CPDF_AAction::ButtonUp)
1165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
1166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return GetAction();
1167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
1168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return NULL;
1170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid  CPDFSDK_Annot::Annot_OnDraw(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device, CPDF_RenderOptions* pOptions)
1173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->GetAPForm(m_pPageView->GetPDFPage(), CPDF_Annot::Normal);
1176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pAnnot->DrawAppearance(m_pPageView->GetPDFPage(), pDevice, pUser2Device, CPDF_Annot::Normal, NULL);
1177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return ;
1179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1181ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDF_Page* CPDFSDK_Annot::GetPDFPage()
1182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
1183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(m_pPageView)
1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pPageView->GetPDFPage();
1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return NULL;
1186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
1187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
1188