summaryrefslogtreecommitdiff
path: root/plugins/UserInfoEx/classMAnnivDate.h
blob: 4e2d447a13cb3ad7b73780fd2b53938ae2ab2524 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
UserinfoEx plugin for Miranda IM

Copyright:
 2006-2010 DeathAxe, Yasnovidyashii, Merlin, K. Romanov, Kreol

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

===============================================================================

File name      : $HeadURL: https://userinfoex.googlecode.com/svn/trunk/classMAnnivDate.h $
Revision       : $Revision: 187 $
Last change on : $Date: 2010-09-08 16:05:54 +0400 (Ср, 08 сен 2010) $
Last change by : $Author: ing.u.horn $

===============================================================================
*/

#pragma once

#define ANID_LAST		0xFFFC
#define ANID_BIRTHDAY	0xFFFE
#define ANID_NONE		0xFFFF

struct MZodiac {
	HICON	hIcon;
	LPCTSTR	pszName;
};

class MAnnivDate : public MTime
{
public:
	typedef enum {
		MADF_NONE				= 0,
		MADF_CHANGED			= 1,	// date has been edited (used, if date is used in controls)
		MADF_HASPROTO			= 2,	// basic protocol module contains date information
		MADF_HASCUSTOM			= 4,	// date is customized or read from a custom module 
		MADF_HASMETA			= 8,	// date is read from a metacontact's subcontact
		MADF_REMINDER_CHANGED	= 16	// reminder options have changed
	} EFlags;

private:
	WORD	_wID;			// index to anniversary in database or ANID_BIRTHDAY
	tstring	_strDesc;		// descripes the anniversary (e.g. birthday)
	string	_strModule;		// the module the anniversary has been read from
	WORD	_wFlags;		// the flags
	BYTE	_bRemind;		// per user setting for reminder (0 - disabled, 1 - use local offset, 2 - use global offset)
	WORD	_wDaysEarlier;	// number of days to the anniversary the user wants to be reminded of this anniversary

	INT DBWriteDate(HANDLE hContact, LPCSTR pszModule, LPCSTR szDay, LPCSTR szMonth, LPCSTR szYear);
	INT DBDeleteDate(HANDLE hContact, LPCSTR pszModule, LPCSTR szDay, LPCSTR szMonth, LPCSTR szYear) const;

public:
	MAnnivDate();
	MAnnivDate(MAnnivDate &mda);

	// basic access to attributes
	__inline LPCTSTR	Description() const				{ return _strDesc.c_str(); };
	__inline VOID		Description(LPCTSTR pszDesc)	{ if (pszDesc) _strDesc = pszDesc; };
	__inline LPCSTR		Module() const					{ return _strModule.c_str(); };
	__inline VOID		Module(LPCSTR pszModule)		{ if (pszModule) _strModule = pszModule; else _strModule.clear(); };
	__inline BYTE		RemindOption() const			{ return _bRemind; };
	__inline VOID		RemindOption(BYTE bRemind)		{ if (bRemind <= BST_INDETERMINATE) _bRemind = bRemind; };
	__inline WORD		RemindOffset() const			{ return _wDaysEarlier; };
	__inline VOID		RemindOffset(WORD wOffset)		{ _wDaysEarlier = wOffset; };
	__inline WORD		Id() const						{ return _wID; };
	__inline VOID		Id(WORD wId)					{ if (_wID == ANID_NONE) _wID = wId; };
	
	DWORD				DateStamp() const;
	VOID				DateStamp(const DWORD dwStamp);
	
	// basic checks
	__inline BOOLEAN IsValid() const;
	__inline BOOLEAN IsChanged() const						{ return (_wFlags & MADF_CHANGED); };
	__inline BOOLEAN IsReminderChanged() const				{ return (_wFlags & MADF_REMINDER_CHANGED); };
	__inline BOOLEAN IsEqual(const MAnnivDate &mda) const	{ return IsEqual(mda.SystemTime()); };
	BOOLEAN	IsEqual(const SYSTEMTIME &st) const;

	// handling flags
	__inline WORD	Flags() const			{ return _wFlags; };
	__inline VOID	Flags(WORD wFlags)		{ _wFlags = wFlags; };
	__inline VOID	SetFlags(WORD wFlag)	{ _wFlags |= wFlag; };
	__inline VOID	RemoveFlags(WORD wFlag)	{ _wFlags &= ~wFlag; };

	// return diffence of days, ignoring the date
	INT	CompareDays(MTime mt) const;
	
	MZodiac	Zodiac();
	INT		Age(MTime *pNow = NULL);
	VOID	Clear();

	// read date from database
	INT DBGetDate(HANDLE hContact, LPCSTR pszModule, LPCSTR szDay, LPCSTR szMonth, LPCSTR szYear);
	INT DBGetDateStamp(HANDLE hContact, LPCSTR pszModule, LPCSTR pszSetting);
	INT DBGetAnniversaryDate(HANDLE hContact, WORD iIndex);
	INT DBGetBirthDate(HANDLE hContact, LPSTR pszProto = NULL);
	INT DBGetReminderOpts(HANDLE hContact);

	// write date to database
	INT DBWriteDateStamp(HANDLE hContact, LPCSTR pszModule, LPCSTR pszSetting);
	INT DBWriteAnniversaryDate(HANDLE hContact, WORD wIndex);
	INT DBWriteBirthDate(HANDLE hContact);
	INT DBWriteReminderOpts(HANDLE hContact);

	// delete date from database
	INT DBDeleteBirthDate(HANDLE hContact);

	INT DBMoveBirthDate(HANDLE hContact, BYTE bOld, BYTE bNew);
	INT BackupBirthday (HANDLE hContact, LPSTR pszProto = NULL, const BOOLEAN bDontIgnoreAnything = FALSE, PWORD lastAnswer = NULL);

	// setting values
	VOID	SetDate(SYSTEMTIME &st);
	VOID	SetDate(MAnnivDate &mda);

	BOOLEAN operator == (const SYSTEMTIME &st) { return IsEqual(st); };
	BOOLEAN operator == (const MAnnivDate &mda) { return IsEqual(mda); };

	VOID operator = (SYSTEMTIME &st) { SetDate(st); };
	VOID operator = (MAnnivDate &mda) { SetDate(mda); };
};