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