Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
9.6 KiB

  1. #ifndef __TREEVIEW_H__
  2. #define __TREEVIEW_H__
  3. interface INotify;
  4. interface IAthenaBrowser;
  5. class CFolderBar;
  6. class CPaneFrame;
  7. typedef struct tagFOLDERNOTIFY FOLDERNOTIFY;
  8. #include "conman.h"
  9. #include "ddfldbar.h"
  10. /////////////////////////////////////////////////////////////////////////////
  11. //
  12. // Types
  13. //
  14. interface ITreeViewNotify
  15. {
  16. virtual void OnSelChange(FOLDERID idFolder) = 0;
  17. virtual void OnRename(FOLDERID idFolder) = 0;
  18. virtual void OnDoubleClick(FOLDERID idFolder) = 0;
  19. };
  20. // flags for CTreeView::HrInit( )
  21. #define TREEVIEW_NOLOCAL 0x0001
  22. #define TREEVIEW_NOIMAP 0x0002
  23. #define TREEVIEW_NONEWS 0x0004
  24. #define TREEVIEW_NOHTTP 0x0008
  25. #define TREEVIEW_DIALOG 0x0010
  26. #define TREEVIEW_FLAGS 0x00FF
  27. // flags for CTreeView::SetSelection( )
  28. #define TVSS_INSERTIFNOTFOUND 0x0001
  29. #ifdef DEAD
  30. // Flags for the collapsed unread display m_fDisplayUnread.
  31. // By default (0x1), we expand unread in local and imap folders
  32. #define TREEVIEW_EXPAND_UNREAD 0x00000001
  33. #define TREEVIEW_EXPAND_IMAP 0x00000002
  34. #define TREEVIEW_EXPAND_NEWS 0x00000004
  35. #endif // DEAD
  36. // Flags for CTreeView::InsertNode
  37. #define TVIN_CHECKFORDUPS 0x00000001 // Check for duplicate entries
  38. #define TVIN_CHECKVISIBILITY 0x00000002 // Check if folder should be displayed
  39. #define TVIN_DONTINSERTCHILDREN 0x00000004 // When adding a node we normally add its children: this suppresses children
  40. #define FIDF_ROOTKID 0x00000001
  41. #define FIDF_USEDEFVIEW 0x00000002 // defview should be used for this folder
  42. #define FIDF_SERVER 0x00000004
  43. #define FIDF_SPECIAL 0x00000008
  44. #define FIDF_UPDATE 0x00000010
  45. #define FIDF_SHOWSUBSCRIBED 0x00000020 // fldr can be shown during subscribed-only (IMAP)
  46. #define FIDF_DISCONNECTED 0x00000040
  47. typedef struct tagFOLDERNODE {
  48. FOLDERINFO Folder;
  49. DWORD dwFlags;
  50. } FOLDERNODE, *LPFOLDERNODE;
  51. class CTreeView : public IDatabaseNotify,
  52. public IInputObject,
  53. public IObjectWithSite,
  54. public IDropTarget,
  55. public IDropSource,
  56. public IDropDownFldrBar,
  57. public IConnectionNotify, //Added for Connection States
  58. public IOleCommandTarget,
  59. public IImnAdviseAccount
  60. {
  61. public:
  62. // *** IUnknown ***
  63. virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
  64. virtual STDMETHODIMP_(ULONG) AddRef(void);
  65. virtual STDMETHODIMP_(ULONG) Release(void);
  66. // *** IOleWindow methods ***
  67. virtual STDMETHODIMP GetWindow(HWND * lphwnd);
  68. virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
  69. HWND Create(HWND hwndParent, IInputObjectSite *pSiteFrame, BOOL fFrame);
  70. // *** IObjectWithSite methods ***
  71. virtual STDMETHODIMP SetSite(IUnknown* punkSite);
  72. virtual STDMETHODIMP GetSite(REFIID riid, LPVOID * ppvSite);
  73. // *** IInputObject methods ***
  74. virtual STDMETHODIMP UIActivateIO(BOOL fActivate, LPMSG lpMsg);
  75. virtual STDMETHODIMP HasFocusIO();
  76. virtual STDMETHODIMP TranslateAcceleratorIO(LPMSG lpmsg);
  77. // *** IDropTarget ***
  78. virtual STDMETHODIMP DragEnter(IDataObject* pDataObject, DWORD grfKeyState,
  79. POINTL pt, DWORD* pdwEffect);
  80. virtual STDMETHODIMP DragOver(DWORD grfKeyState, POINTL pt, DWORD* pdwEffect);
  81. virtual STDMETHODIMP DragLeave(void);
  82. virtual STDMETHODIMP Drop(IDataObject* pDataObject, DWORD grfKeyState,
  83. POINTL pt, DWORD* pdwEffect);
  84. // *** IDropSource ***
  85. virtual STDMETHODIMP QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState);
  86. virtual STDMETHODIMP GiveFeedback(DWORD dwEffect);
  87. // *** IDatabaseNotify ***
  88. virtual STDMETHODIMP OnTransaction(HTRANSACTION hTransaction, DWORD_PTR dwCookie, IDatabase *pDB);
  89. // *** IOleCommandTarget ***
  90. virtual STDMETHODIMP QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[],
  91. OLECMDTEXT *pCmdText);
  92. virtual STDMETHODIMP Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
  93. VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  94. #ifndef WIN16 //No RAS support in Win16
  95. //IConnectionNotify
  96. virtual STDMETHODIMP OnConnectionNotify (CONNNOTIFY nCode, LPVOID pvData, CConnectionManager *pConMan);
  97. #endif
  98. CTreeView(ITreeViewNotify *pNotify);
  99. ~CTreeView();
  100. HRESULT HrInit(DWORD dwType, IAthenaBrowser* pBrowser);
  101. HRESULT DeInit(void);
  102. void HandleMsg(UINT msg, WPARAM wParam, LPARAM lParam);
  103. HRESULT Refresh(void);
  104. FOLDERID GetSelection(void);
  105. HRESULT SetSelection(FOLDERID idFolder, DWORD dwFlags);
  106. HRESULT SelectParent();
  107. HRESULT SelectNextUnreadItem();
  108. HRESULT ForceSelectionChange(void);
  109. //IDropDownFolderBar
  110. virtual HRESULT RegisterFlyOut(CFolderBar *pFolderBar);
  111. virtual HRESULT RevokeFlyOut();
  112. //IImnAdviseAccount
  113. virtual STDMETHODIMP AdviseAccount(DWORD dwType, ACTX *actx);
  114. protected:
  115. LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
  116. BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct);
  117. LRESULT OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr);
  118. void OnContextMenu(HWND hwnd, HWND hwndClick, int x, int y);
  119. void OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
  120. void OnSize(HWND hwnd, UINT state, int cxClient, int cyClient);
  121. LRESULT OnCustomDraw(NMCUSTOMDRAW *pnmcd);
  122. HRESULT HrFillTreeView(void);
  123. HRESULT FillTreeView2(HTREEITEM hparent, LPFOLDERINFO pParent, BOOL fInitExpand, int conn, BOOL *pfUnread);
  124. HTREEITEM GetItemFromId(FOLDERID idFolder);
  125. LPFOLDERNODE GetFolderNode(HTREEITEM hItem);
  126. HTREEITEM FindKid(HTREEITEM hitem, FOLDERID idFolder);
  127. HTREEITEM InsertNode(FOLDERID idFolder, DWORD dwFlags);
  128. HTREEITEM MoveNode(FOLDERID idFolder, FOLDERID idParentNew);
  129. BOOL DeleteNode(FOLDERID idFolder);
  130. void OnNotifyDeleteNode(FOLDERID idFolder);
  131. BOOL FolderIsVisible(FOLDERID idFolder);
  132. void SortChildren(HTREEITEM hitem);
  133. HTREEITEM ITreeView_InsertItem(TV_INSERTSTRUCT *ptvis, LPFOLDERNODE pNode);
  134. BOOL ITreeView_SetItem(TV_ITEM *ptvi, LPFOLDERINFO pFolder);
  135. HRESULT SaveExpandState(HTREEITEM hitem);
  136. HRESULT GetConnectedState(FOLDERINFO *pFolder, int *pconn);
  137. // WM_NOTIFY handlers
  138. LRESULT OnBeginDrag(NM_TREEVIEW* pnmtv);
  139. LRESULT OnBeginLabelEdit(TV_DISPINFO* ptvdi);
  140. BOOL OnEndLabelEdit(TV_DISPINFO* ptvdi);
  141. static LRESULT CALLBACK TreeViewWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
  142. void UpdateDragDropHilite(POINTL *ppt);
  143. HTREEITEM GetItemFromPoint(POINTL pt);
  144. DWORD DragEffectFromFormat(CLIPFORMAT cf, DWORD grfKeyState);
  145. BOOL ValidateDropType(CLIPFORMAT cf, HTREEITEM hti);
  146. HRESULT PidlToGroup(HTREEITEM hti, LPTSTR *pszAccount, LPTSTR *pszGroup);
  147. BOOL AutoScroll(const POINT *ppt);
  148. void UpdateLabelColors();
  149. void AdjustItemHeight(void);
  150. void UpdateChildren(HTREEITEM treeitem, BOOL canconn, BOOL fSiblings);
  151. void ExpandToVisible(HWND hwnd, HTREEITEM hti);
  152. BOOL IsDefaultAccount(FOLDERINFO *pInfo);
  153. protected:
  154. ULONG m_cRef;
  155. DWORD m_dwFlags;
  156. HWND m_hwndParent;
  157. HWND m_hwnd;
  158. HWND m_hwndTree;
  159. IAthenaBrowser *m_pBrowser;
  160. HWND m_hwndUIParent;
  161. ITreeViewNotify *m_pNotify;
  162. IDockingWindowSite *m_pObjSite;
  163. LONG m_xWidth;
  164. BOOL m_fShow;
  165. BOOL m_fExpandUnread;
  166. UINT_PTR m_idSelTimer;
  167. IDataObject *m_pDataObject; // Pointer to the IDataObject being dragged over us
  168. IDropTarget *m_pDTCur;
  169. HTREEITEM m_htiCur;
  170. DWORD m_dwExpandTime;
  171. DWORD m_dwEffectCur;
  172. DWORD m_grfKeyState;
  173. HTREEITEM m_htiMenu;
  174. BOOL m_fEditLabel;
  175. HTREEITEM m_hitemEdit;
  176. BOOL m_fIgnoreNotify;
  177. CFolderBar *m_pFolderBar;
  178. DWORD m_dwAcctConnIndex;
  179. CPaneFrame *m_pPaneFrame;
  180. HWND m_hwndPaneFrame;
  181. DWORD m_clrWatched;
  182. };
  183. #define TVM_SELCHANGED (WM_USER + 6)
  184. #define TVM_DBLCLICK (WM_USER + 7)
  185. class CTreeViewFrame :
  186. public IInputObjectSite,
  187. public IOleWindow,
  188. public ITreeViewNotify
  189. {
  190. public:
  191. CTreeViewFrame(void);
  192. ~CTreeViewFrame(void);
  193. HRESULT Initialize(HWND hwnd, RECT *prc, DWORD dwFlags);
  194. inline CTreeView *GetTreeView(void) {return(m_ptv);}
  195. void CloseTreeView(void);
  196. // IUnknown
  197. virtual STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject);
  198. virtual STDMETHODIMP_(ULONG) AddRef(void);
  199. virtual STDMETHODIMP_(ULONG) Release(void);
  200. // IOleWindow
  201. virtual STDMETHODIMP GetWindow(HWND * lphwnd);
  202. virtual STDMETHODIMP ContextSensitiveHelp(BOOL fEnterMode);
  203. //IInputObjectSite
  204. virtual STDMETHODIMP OnFocusChangeIS(IUnknown *punk, BOOL fSetFocus);
  205. // ITreeViewNotify
  206. void OnSelChange(FOLDERID idFolder);
  207. void OnRename(FOLDERID idFolder);
  208. void OnDoubleClick(FOLDERID idFolder);
  209. private:
  210. UINT m_cRef;
  211. HWND m_hwnd;
  212. RECT m_rect;
  213. CTreeView *m_ptv;
  214. };
  215. #endif // __TREEVIEW_H__