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