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
|
/*
New Away System - plugin for Miranda IM
Copyright (c) 2005-2007 Chervov Dmitry
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
*/
#pragma once
extern COptPage g_MsgTreePage;
class CMsgTree
{
public:
CMsgTree(HWND hTreeView); // warning: it changes GWLP_USERDATA of the parent window
~CMsgTree();
CBaseTreeItem* GetSelection(); // returns NULL if there's nothing selected
bool SetSelection(int ID, int Flags); // set ID = -1 to unselect; ID specifies an order of an item if Flags = MTSS_BYORDER
int GetDefMsg(int iMode);
void SetDefMsg(int iMode, int ID);
void Save();
void UpdateItem(int ID); // updates item title, and expanded/collapsed state for groups; set SetModified to TRUE to change m_bModified flag of the tree
bool DeleteSelectedItem(); // returns true if the item was deleted
CTreeItem* AddCategory();
CTreeItem* AddMessage();
CBaseTreeItem* GetNextItem(int Flags, CBaseTreeItem* Item); // Item is 'int ID' if MTGN_BYID flag is set; returns CBaseTreeItem* or NULL
void EnsureVisible(HTREEITEM hItem) {TreeView_EnsureVisible(hTreeView, hItem);}
bool GetModified() {return MsgTreePage.GetModified();}
void SetModified(bool m_bModified) {MsgTreePage.SetModified(m_bModified);}
friend LRESULT CALLBACK ParentSubclassProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
friend LRESULT CALLBACK MsgTreeSubclassProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
private:
COptItem_TreeCtrl* GetTreeCtrl() {return (COptItem_TreeCtrl*)MsgTreePage.Find(GetDlgCtrlID(hTreeView));}
HWND hTreeView;
WNDPROC OrigTreeViewProc;
WNDPROC OrigParentProc;
COptPage MsgTreePage;
HTREEITEM hDragItem;
HTREEITEM hPrevDropTarget;
int UpdateLock;
HIMAGELIST hImageList;
};
// SetSelection constants
#define MTSS_BYID 0
#define MTSS_BYORDER 1
// GetNextItem constants
#define MTGN_ROOT 0
#define MTGN_CHILD 1
#define MTGN_PARENT 2
#define MTGN_NEXT 3
#define MTGN_PREV 4
#define MTGN_BYID 0x8000 // means that lParam is ID of an item, not a pointer to its data
// notifications
typedef struct
{
NMHDR hdr;
CBaseTreeItem* ItemOld;
CBaseTreeItem* ItemNew;
} NMMSGTREE;
typedef NMMSGTREE* PNMMSGTREE;
#define MTN_FIRST (0U - 100U)
#define MTN_SELCHANGED (MTN_FIRST - 0) // lParam = &NMMSGTREE; ItemOld and ItemNew contain old and new item info
#define MTN_BEGINDRAG (MTN_FIRST - 1) // lParam = &NMMSGTREE; ItemOld points to the item info; return TRUE to cancel dragging
#define MTN_ENDDRAG (MTN_FIRST - 2) // lParam = &NMMSGTREE; ItemOld points to the item info; ItemNew points to the item on which ItemOld was dropped; return TRUE to cancel moving
#define MTN_NEWCATEGORY (MTN_FIRST - 3) // lParam = &NMMSGTREE; ItemNew points to new category info
#define MTN_NEWMESSAGE (MTN_FIRST - 4) // lParam = &NMMSGTREE; ItemNew points to new message info
#define MTN_ITEMRENAMED (MTN_FIRST - 5) // lParam = &NMMSGTREE; ItemNew points to renamed item info
#define MTN_DELETEITEM (MTN_FIRST - 6) // lParam = &NMMSGTREE; ItemOld points to the item info; return TRUE to prevent item from being deleted
#define MTN_DEFMSGCHANGED (MTN_FIRST - 7) // lParam = &NMMSGTREE; ItemOld and ItemNew point to old and new default item info correspondingly
void LoadMsgTreeModule();
|