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.

239 lines
9.0 KiB

  1. /////////////////////////////////////////////////////////////////////////////
  2. // Copyright (C) 1993-1998 Microsoft Corporation. All Rights Reserved.
  3. //
  4. // MODULE: msgview.h
  5. //
  6. // PURPOSE: Defines the Outlook Express view class that handles
  7. // displaying the contents of folders with messages.
  8. //
  9. #pragma once
  10. #include "browser.h"
  11. #include "ibodyopt.h"
  12. #include "mimeole.h"
  13. #include "ibodyobj.h"
  14. #include "dragdrop.h"
  15. #define HANDLE_WM_FOLDER_LOADED(hwnd, wParam, lParam, fn) \
  16. OnFolderLoaded((hwnd), (wParam), (lParam))
  17. /////////////////////////////////////////////////////////////////////////////
  18. // Forward References
  19. //
  20. interface IMessageList;
  21. interface IBodyObj2;
  22. class CGetNewGroups;
  23. class CViewMenu;
  24. class CMessageView : IViewWindow,
  25. IMessageWindow,
  26. IDispatch,
  27. IOleCommandTarget,
  28. IBodyOptions,
  29. IMimeEditEventSink,
  30. IServerInfo
  31. {
  32. public:
  33. /////////////////////////////////////////////////////////////////////////
  34. // Constructors, Destructors, and Initialization
  35. //
  36. CMessageView();
  37. ~CMessageView();
  38. HRESULT Initialize(FOLDERID idFolder);
  39. /////////////////////////////////////////////////////////////////////////
  40. // IUnknown
  41. //
  42. STDMETHOD(QueryInterface)(REFIID riid, void **ppvObj);
  43. STDMETHOD_(ULONG, AddRef)(void);
  44. STDMETHOD_(ULONG, Release)(void);
  45. /////////////////////////////////////////////////////////////////////////
  46. // IOleWindow
  47. //
  48. STDMETHOD(GetWindow)(HWND *pHwnd);
  49. STDMETHOD(ContextSensitiveHelp)(BOOL fEnterMode);
  50. /////////////////////////////////////////////////////////////////////////
  51. // IViewWindow
  52. //
  53. STDMETHOD(TranslateAccelerator)(THIS_ LPMSG pMsg);
  54. STDMETHOD(UIActivate)(THIS_ UINT uState);
  55. STDMETHOD(CreateViewWindow)(THIS_ IViewWindow *pPrevView, IAthenaBrowser *pBrowser,
  56. RECT *prcView, HWND *pHwnd);
  57. STDMETHOD(DestroyViewWindow)(THIS);
  58. STDMETHOD(SaveViewState)(THIS);
  59. STDMETHOD(OnPopupMenu)(THIS_ HMENU hMenu, HMENU hMenuPopup, UINT uID);
  60. /////////////////////////////////////////////////////////////////////////
  61. // IMessageWindow
  62. //
  63. STDMETHOD(OnFrameWindowActivate)(THIS_ BOOL fActivate);
  64. STDMETHOD(GetCurCharSet)(THIS_ UINT *cp);
  65. STDMETHOD(UpdateLayout)(THIS_ BOOL fPreviewVisible, BOOL fPreviewHeader,
  66. BOOL fPreviewVert, BOOL fReload);
  67. STDMETHOD(GetMessageList)(THIS_ IMessageList ** ppMsgList);
  68. /////////////////////////////////////////////////////////////////////////
  69. // IOleCommandTarget
  70. //
  71. STDMETHOD(QueryStatus)(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[],
  72. OLECMDTEXT *pCmdText);
  73. STDMETHOD(Exec)(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdExecOpt,
  74. VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  75. /////////////////////////////////////////////////////////////////////////
  76. // IDispatch
  77. //
  78. STDMETHOD(GetIDsOfNames)(REFIID riid, OLECHAR **rgszNames, UINT cNames,
  79. LCID lcid, DISPID *rgDispId)
  80. {
  81. return (E_NOTIMPL);
  82. }
  83. STDMETHOD(GetTypeInfo)(unsigned int iTInfo, LCID lcid, ITypeInfo **ppTInfo)
  84. {
  85. return (E_NOTIMPL);
  86. }
  87. STDMETHOD(GetTypeInfoCount)(unsigned int FAR* pctinfo)
  88. {
  89. return (E_NOTIMPL);
  90. }
  91. STDMETHOD(Invoke)(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
  92. DISPPARAMS* pDispParams, VARIANT* pVarResult,
  93. EXCEPINFO* pExcepInfo, unsigned int* puArgErr);
  94. /////////////////////////////////////////////////////////////////////////
  95. // IBodyOptions
  96. //
  97. STDMETHOD(SignatureEnabled)(BOOL fAuto)
  98. {
  99. return (E_NOTIMPL);
  100. }
  101. STDMETHOD(GetSignature)(LPCSTR szSigID, LPDWORD pdwSigOptions, BSTR *pbstr)
  102. {
  103. return (E_NOTIMPL);
  104. }
  105. STDMETHOD(GetMarkAsReadTime)(LPDWORD pdwSecs);
  106. STDMETHOD(GetFlags)(LPDWORD pdwFlags);
  107. STDMETHOD(GetInfo)(BODYOPTINFO *pBOI)
  108. {
  109. return (E_NOTIMPL);
  110. }
  111. STDMETHOD(GetAccount)(IImnAccount **ppAcct);
  112. /////////////////////////////////////////////////////////////////////////
  113. // IMimeEditEventSink
  114. //
  115. STDMETHOD(EventOccurred)(DWORD cmdID, IMimeMessage *pMessage);
  116. /////////////////////////////////////////////////////////////////////////
  117. // IServerInfo
  118. //
  119. STDMETHOD(GetFolderId)(FOLDERID *pID);
  120. STDMETHOD(GetMessageFolder)(IMessageServer **ppServer);
  121. /////////////////////////////////////////////////////////////////////////
  122. // Window Handling
  123. //
  124. protected:
  125. static LRESULT CALLBACK ViewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  126. LRESULT CALLBACK _WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
  127. BOOL OnCreate(HWND hwnd, LPCREATESTRUCT lpCreateStruct);
  128. void OnPostCreate(HWND hwnd);
  129. void OnSize(HWND hwnd, UINT state, int cxClient, int cyClient);
  130. void OnLButtonDown(HWND hwnd, BOOL fDoubleClick, int x, int y, UINT keyFlags);
  131. void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags);
  132. void OnLButtonUp(HWND hwnd, int x, int y, UINT keyFlags);
  133. void OnMenuSelect(HWND hwnd, WPARAM wParam, LPARAM lParam);
  134. LRESULT OnNotify(HWND hwnd, int idFrom, LPNMHDR pnmhdr);
  135. void OnDestroy(HWND hwnd);
  136. void OnSetFocus(HWND hwnd, HWND hwndOldFocus);
  137. void OnFolderLoaded(HWND hwnd, WPARAM wParam, LPARAM lParam);
  138. LRESULT OnTestGetMsgId(HWND hwnd);
  139. LRESULT OnTestSaveMessage(HWND hwnd);
  140. /////////////////////////////////////////////////////////////////////////
  141. // Command Handlers
  142. //
  143. HRESULT CmdOpen(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  144. HRESULT CmdFillPreview(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  145. HRESULT CmdShowPreview(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  146. HRESULT CmdReplyForward(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  147. HRESULT CmdCancelMessage(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  148. HRESULT CmdBlockSender(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  149. HRESULT CmdCreateRule(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  150. HRESULT CmdRefresh(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  151. HRESULT CmdAddToWab(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  152. HRESULT CmdCombineAndDecode(DWORD nCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn, VARIANTARG *pvaOut);
  153. /////////////////////////////////////////////////////////////////////////
  154. // Utility functions
  155. //
  156. BOOL _InitMessageList(void);
  157. BOOL _InitPreviewPane(void);
  158. HRESULT _SetListOptions(void);
  159. BOOL _IsPreview(void);
  160. void _UpdatePreviewPane(BOOL fForceDownload=FALSE);
  161. void _SetProgressStatusText(BSTR bstr);
  162. void _SetDefaultStatusText(void);
  163. HRESULT _OnMessageAvailable(MESSAGEID idMessage, HRESULT hrCompletion);
  164. HRESULT _DoEmailBombCheck(LPMIMEMESSAGE pMsg);
  165. void _OptionUpdate(DWORD dwUpdate);
  166. BOOL _ReuseMessageFolder(IViewWindow *pPrevView);
  167. HRESULT _StoreCharsetOntoRows(HCHARSET hCharset);
  168. /////////////////////////////////////////////////////////////////////////
  169. // Member Data
  170. private:
  171. ULONG m_cRef;
  172. // Handy window handles
  173. HWND m_hwnd;
  174. HWND m_hwndParent;
  175. HWND m_hwndList;
  176. // Shell stuff
  177. IAthenaBrowser *m_pBrowser;
  178. FOLDERID m_idFolder;
  179. CDropTarget *m_pDropTarget;
  180. // Message List
  181. IMessageList *m_pMsgList;
  182. IOleCommandTarget *m_pMsgListCT;
  183. IOleInPlaceActiveObject *m_pMsgListAO;
  184. DWORD m_dwCookie;
  185. IMessageServer *m_pServer;
  186. // Preview Pane
  187. IBodyObj2 *m_pPreview;
  188. IOleCommandTarget *m_pPreviewCT;
  189. MESSAGEID m_idMessageFocus;
  190. CStatusBar *m_pProgress;
  191. BOOL m_fNotDownloaded;
  192. // Layout
  193. BOOL m_fSplitHorz;
  194. RECT m_rcSplit;
  195. DWORD m_dwSplitVertPct;
  196. DWORD m_dwSplitHorzPct;
  197. BOOL m_fDragging;
  198. // State
  199. UINT m_uUIState;
  200. DWORD m_cItems;
  201. DWORD m_cUnread;
  202. DWORD m_cLastChar;
  203. CGetNewGroups *m_pGroups;
  204. // For View.Current View menu
  205. CViewMenu *m_pViewMenu;
  206. };