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