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.

405 lines
15 KiB

  1. #ifndef _HEADER_H
  2. #define _HEADER_H
  3. #include <richedit.h>
  4. #ifndef _RICHOLE_H //hack as richole.h has no #ifdef around it
  5. #define _RICHOLE_H
  6. #include <richole.h>
  7. #endif
  8. #include <mimeole.h>
  9. #include <wells.h>
  10. #include <addrobj.h>
  11. #include "iheader.h"
  12. #include <envelope.h>
  13. #include <mso.h>
  14. #include "secutil.h"
  15. #include "tom.h"
  16. #include "reutil.h"
  17. //
  18. // Forwards
  19. //
  20. interface IImnAccount;
  21. class CAttMan;
  22. //
  23. // Structures and other defintions
  24. //
  25. enum
  26. { // templates for types of note (defines header layout)
  27. NT_SENDNOTE=0,
  28. NT_READNOTE,
  29. NT_NOTECOUNT
  30. };
  31. enum
  32. {
  33. VCardFALSE=0,
  34. VCardTRUE,
  35. VCardDONTKNOW
  36. };
  37. BOOL FHeader_Init(BOOL fInit);
  38. HRESULT CreateInstance_Envelope(IUnknown* pUnkOuter, IUnknown** ppUnknown);
  39. void HdrSetRichEditText(HWND hwnd, LPWSTR pwchBuff, BOOL fReplace);
  40. DWORD HdrGetRichEditText(HWND hwnd, LPWSTR pwchBuff, DWORD dwNumChars, BOOL fSelection);
  41. // enumeration of icons in the button image list
  42. enum
  43. {
  44. iimlHdrAddrRolodex=0,
  45. iimlHdrNewsRolodex,
  46. //iimlHdrNext,
  47. };
  48. enum // HCINFO.dwFlags
  49. {
  50. HCF_MULTILINE =0x0001,
  51. HCF_READONLY =0x0002,
  52. HCF_HASBUTTON =0x0004,
  53. HCF_ADVANCED =0x0008,
  54. HCF_ADDRWELL =0x0010,
  55. HCF_USECHARSET =0x0020,
  56. HCF_OPTIONAL =0x0040,
  57. HCF_HIDDEN =0x0080,
  58. HCF_COMBO =0x0100,
  59. HCF_BORDER =0x0200,
  60. HCF_ATTACH =0x0400,
  61. HCF_ADDRBOOK =0x0800,
  62. HCF_NEWSPICK =0x1000,
  63. };
  64. enum
  65. {
  66. AC_IGNORE =0x01,
  67. AC_SELECTION =0x02
  68. };
  69. // header control info structure
  70. typedef struct tagHCI
  71. {
  72. DWORD dwFlags,
  73. dwOpt; // valid if HCF_OPTIONAL
  74. int idEdit, // id of well
  75. idBtn, // id of button (if
  76. idsLabel, // id used for label of well
  77. idsEmpty, // id of string used for empty well
  78. idsTT; // string for tooltip of the well
  79. DWORD dwACFlags; // valid if HCF_ADDRWELL
  80. BOOL fEmpty; // state info
  81. LPRICHEDITOLE preole; // oleinterface; MUST ZeroInit
  82. ITextDocument *pDoc; // RichEdit interface for text document
  83. int cy, // y pos of the control (and hence the label)
  84. height, // y size of control (used when growing control)
  85. strlen, // strlen of label
  86. strlenEmpty; // strlen of the empty string
  87. WCHAR sz[cchHeaderMax+1], // string for label
  88. szEmpty[cchHeaderMax+1]; // string for empty state
  89. } HCI, *PHCI;
  90. class CNoteHdr :
  91. public IPersistMime,
  92. public IOleCommandTarget,
  93. public IHeader,
  94. public IMsoEnvelope,
  95. public IMsoComponent,
  96. public IDropTarget,
  97. public IFontCacheNotify
  98. {
  99. public:
  100. // IUnknown
  101. HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID FAR *);
  102. ULONG STDMETHODCALLTYPE AddRef();
  103. ULONG STDMETHODCALLTYPE Release();
  104. // IPersistMime
  105. HRESULT STDMETHODCALLTYPE Load(LPMIMEMESSAGE);
  106. HRESULT STDMETHODCALLTYPE Save(LPMIMEMESSAGE, DWORD);
  107. HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClsID);
  108. // IOleCommandTarget
  109. HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *, ULONG, OLECMD prgCmds[], OLECMDTEXT *);
  110. HRESULT STDMETHODCALLTYPE Exec(const GUID *, DWORD, DWORD, VARIANTARG *, VARIANTARG *);
  111. // IHeader
  112. HRESULT STDMETHODCALLTYPE Init(IHeaderSite* pHeaderSite, HWND hwndParent);
  113. HRESULT STDMETHODCALLTYPE SetRect(LPRECT);
  114. HRESULT STDMETHODCALLTYPE GetRect(LPRECT);
  115. HRESULT STDMETHODCALLTYPE SetPriority(UINT pri);
  116. HRESULT STDMETHODCALLTYPE GetPriority(UINT* ppri);
  117. HRESULT STDMETHODCALLTYPE ShowAdvancedHeaders(BOOL fOn);
  118. HRESULT STDMETHODCALLTYPE FullHeadersShowing(void);
  119. HRESULT STDMETHODCALLTYPE ChangeLanguage(LPMIMEMESSAGE pMsg);
  120. HRESULT STDMETHODCALLTYPE GetTitle(LPWSTR lpszTitle, ULONG cch);
  121. HRESULT STDMETHODCALLTYPE UpdateRecipientMenu(HMENU hmenu);
  122. HRESULT STDMETHODCALLTYPE SetInitFocus(BOOL fSubject);
  123. HRESULT STDMETHODCALLTYPE SetVCard(BOOL fFresh);
  124. HRESULT STDMETHODCALLTYPE IsSecured();
  125. HRESULT STDMETHODCALLTYPE IsHeadSigned();
  126. HRESULT STDMETHODCALLTYPE ForceEncryption(BOOL *fEncrypt, BOOL fSet);
  127. HRESULT STDMETHODCALLTYPE AddRecipient(int idOffset);
  128. HRESULT STDMETHODCALLTYPE GetTabStopArray(HWND *rgTSArray, int *pcArrayCount);
  129. HRESULT STDMETHODCALLTYPE SetFlagState(MARK_TYPE markType);
  130. HRESULT STDMETHODCALLTYPE WMCommand(HWND, int, WORD);
  131. HRESULT STDMETHODCALLTYPE OnDocumentReady(LPMIMEMESSAGE pMsg);
  132. HRESULT STDMETHODCALLTYPE DropFiles(HDROP hDrop, BOOL fMakeLinks);
  133. HRESULT STDMETHODCALLTYPE HrGetAttachCount(ULONG *pcAttMan);
  134. HRESULT STDMETHODCALLTYPE HrIsDragSource();
  135. HRESULT STDMETHODCALLTYPE HrGetAccountInHeader(IImnAccount **ppAcct);
  136. // IDropTarget
  137. HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  138. HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  139. HRESULT STDMETHODCALLTYPE DragLeave(void);
  140. HRESULT STDMETHODCALLTYPE Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect);
  141. // IMsoEnvelope
  142. HRESULT STDMETHODCALLTYPE Init(IUnknown* punk, IMsoEnvelopeSite* pesit, DWORD grfInit);
  143. HRESULT STDMETHODCALLTYPE SetParent(HWND hwndParent);
  144. HRESULT STDMETHODCALLTYPE Resize(LPCRECT prc);
  145. HRESULT STDMETHODCALLTYPE Show(BOOL fShow);
  146. HRESULT STDMETHODCALLTYPE SetHelpMode(BOOL fEnter);
  147. HRESULT STDMETHODCALLTYPE Save(IStream* pstm, DWORD grfSave);
  148. HRESULT STDMETHODCALLTYPE GetAttach(const WCHAR* wszName,IStream** ppstm);
  149. HRESULT STDMETHODCALLTYPE SetAttach(const WCHAR* wszName,const WCHAR* szFile,IStream** ppstm,DWORD* pgrfAttach);
  150. HRESULT STDMETHODCALLTYPE NewAttach(const WCHAR* pwzName,DWORD grfAttach);
  151. HRESULT STDMETHODCALLTYPE SetFocus(DWORD grfFocus);
  152. HRESULT STDMETHODCALLTYPE GetHeaderInfo(ULONG dispid, DWORD grfHeader, void **ppv);
  153. HRESULT STDMETHODCALLTYPE SetHeaderInfo(ULONG dispid, const void *pv);
  154. HRESULT STDMETHODCALLTYPE IsDirty();
  155. HRESULT STDMETHODCALLTYPE GetLastError(HRESULT hr, WCHAR __RPC_FAR *wszBuf, ULONG cchBuf);
  156. HRESULT STDMETHODCALLTYPE DoDebug(DWORD grfDebug);
  157. // IMsoComponent
  158. BOOL STDMETHODCALLTYPE FDebugMessage(HMSOINST, UINT, WPARAM, LPARAM);
  159. BOOL STDMETHODCALLTYPE FPreTranslateMessage(MSG *);
  160. void STDMETHODCALLTYPE OnEnterState(ULONG, BOOL);
  161. void STDMETHODCALLTYPE OnAppActivate(BOOL, DWORD);
  162. void STDMETHODCALLTYPE OnLoseActivation();
  163. void STDMETHODCALLTYPE OnActivationChange(IMsoComponent *, BOOL, const MSOCRINFO *, BOOL, const MSOCHOSTINFO *, DWORD);
  164. BOOL STDMETHODCALLTYPE FDoIdle(DWORD grfidlef);
  165. BOOL STDMETHODCALLTYPE FContinueMessageLoop(ULONG, void *, MSG *);
  166. BOOL STDMETHODCALLTYPE FQueryTerminate(BOOL);
  167. void STDMETHODCALLTYPE Terminate();
  168. HWND STDMETHODCALLTYPE HwndGetWindow(DWORD, DWORD);
  169. // IFontCacheNotify
  170. HRESULT STDMETHODCALLTYPE OnPreFontChange(void);
  171. HRESULT STDMETHODCALLTYPE OnPostFontChange(void);
  172. static LRESULT EXPORT_16 CALLBACK ExtCNoteHdrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  173. static LRESULT EXPORT_16 CALLBACK EditSubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  174. static LRESULT EXPORT_16 CALLBACK BtnSubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  175. static LRESULT EXPORT_16 CALLBACK IMESubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, PHCI phci);
  176. CNoteHdr();
  177. virtual ~CNoteHdr();
  178. private:
  179. ULONG m_cRef,
  180. m_cHCI,
  181. m_cAccountIDs,
  182. m_cxLeftMargin;
  183. BOOL m_fSendImmediate,//as opposed to sendlater.
  184. m_fAdvanced,
  185. m_fInSize,
  186. m_fDirty,
  187. m_fVCard,
  188. m_fVCardSave,
  189. m_fAutoComplete,
  190. m_fMail,
  191. m_fSecurityInited,
  192. m_fThisHeadDigSigned,
  193. m_fThisHeadEncrypted,
  194. m_fSignTrusted,
  195. m_fEncryptionOK,
  196. m_fDigSigned,
  197. m_fEncrypted,
  198. m_fFlagged,
  199. m_fOfficeInit,
  200. m_fUIActive,
  201. m_fResizing,
  202. m_fHandleChange,
  203. m_fAddressesChanged,
  204. m_fForceEncryption,
  205. m_fSkipLayout,
  206. m_fStillLoading,
  207. m_fDropTargetRegister,
  208. m_fShowedUnicodeDialog;
  209. HWND m_hwndToolbar,
  210. m_hwnd,
  211. m_hwndParent,
  212. m_hwndTT,
  213. m_hwndLastFocus,
  214. m_hwndRebar;
  215. UINT m_ntNote;
  216. DWORD m_dwComponentMgrID,
  217. m_dwFontNotify,
  218. m_dwIMEStartCount;
  219. RECT m_rcCurrentBtn;
  220. HWND m_hwndOldCapture;
  221. WORD m_wNoteType;
  222. INT m_dxTBOffset;
  223. int m_pri,
  224. m_iCurrComboIndex,
  225. m_iUnicodeDialogResult;
  226. LPSTR *m_ppAccountIDs;
  227. LPWSTR m_lpszSecurityField,
  228. m_pszRefs;
  229. TCHAR m_szLastLang[cchHeaderMax+1];
  230. PHCI m_rgHCI;
  231. CAddrWells *m_pAddrWells;
  232. LPWABAL m_lpWabal;
  233. SECSTATE m_SecState;
  234. HCHARSET m_hCharset;
  235. LPMAPITABLE m_pTable;
  236. LPWAB m_lpWab;
  237. CAttMan *m_lpAttMan;
  238. MARK_TYPE m_MarkType;
  239. CLIPFORMAT m_cfAccept;
  240. DWORD m_dwDragType,
  241. m_grfKeyState,
  242. m_dwCurrentBtn,
  243. m_dwClickedBtn,
  244. m_cCapture,
  245. m_dwEffect;
  246. IHeaderSite *m_pHeaderSite; // valid if athena hosts header
  247. IMsoEnvelopeSite *m_pEnvelopeSite; // valid if Office hosts header
  248. IImnAccount *m_pAccount;
  249. HINITREF m_hInitRef; // Application reference count
  250. IMsoComponentManager *m_pMsoComponentMgr;
  251. IMimeMessage *m_pMsgSend,
  252. *m_pMsg;
  253. HIMAGELIST m_himl;
  254. BOOL m_fPoster;
  255. private:
  256. LRESULT CALLBACK CNoteHdrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  257. BOOL IsReplyNote();
  258. BOOL WMCreate();
  259. BOOL WMNotify(WPARAM wParam, LPARAM lParam);
  260. void WMPaint();
  261. void OnDestroy();
  262. void OnNCDestroy();
  263. BOOL PostWMCreate();
  264. void OnButtonClick(int idBtn);
  265. void SetReferences(LPMIMEMESSAGE pMsg);
  266. void HrPickGroups(int idWell, BOOL fFollowUpTo);
  267. // VCard
  268. HRESULT HrShowVCardProperties(HWND hwnd);
  269. HRESULT HrShowVCardCtxtMenu(int x, int y);
  270. HRESULT HrGetVCardName(LPTSTR pszName, DWORD cch);
  271. HRESULT HrOnOffVCard();
  272. HRESULT _AttachVCard(IMimeMessage *pMsg);
  273. HRESULT HrInit(IMimeMessage *pMsg);
  274. HRESULT HrFShowHeader(PHCI phci);
  275. HRESULT HrAutoComplete(HWND hwnd, PHCI pHCI);
  276. HRESULT HrUpdateCharSetFonts(HCHARSET hCharset, BOOL fUpdateFields);
  277. HRESULT HrInitFieldList();
  278. HRESULT HrFreeFieldList();
  279. HRESULT HrCheckNames(BOOL fSilent, BOOL fSetCheckedFlag);
  280. HRESULT HrClearUndoStack();
  281. HRESULT HrNewsSave(LPMIMEMESSAGE pMsg, CODEPAGEID cpID, BOOL fCheckConflictOnly);
  282. HRESULT HrCopyNonRecipientHeaders(LPMIMEMESSAGE pMsg);
  283. HRESULT HrOfficeLoad();
  284. HRESULT HrAutoAddToWAB();
  285. HRESULT HrSetPri(LPMIMEMESSAGE pMsg);
  286. HRESULT HrSetupNote(LPMIMEMESSAGE pMsg);
  287. HRESULT HrSetMailRecipients(LPMIMEMESSAGE pMsg);
  288. HRESULT HrSetNewsRecipients(LPMIMEMESSAGE pMsg);
  289. HRESULT HrSetNewsWabal(LPMIMEMESSAGE pMsg, LPWSTR pwszCC);
  290. HRESULT HrSetReplySubject(LPMIMEMESSAGE pMsg, BOOL fReply);
  291. HRESULT HrQueryToolbarButtons(DWORD dwFlags, const GUID *pguidCmdGroup, OLECMD* pOleCmd);
  292. HRESULT HrGetFieldText(LPWSTR* ppszText, int idHdrCtrl);
  293. HRESULT HrGetFieldText(LPWSTR* ppszText, HWND hwnd);
  294. HRESULT ResolveGroupNames(HWND hwnd, int idField, FOLDERID idServer, BOOL fPosterAllowed, BOOL *fOneOrMoreNames);
  295. HRESULT HrAddSender();
  296. HRESULT HrAddAllOnToList();
  297. HRESULT HrCheckGroups(BOOL fPosting);
  298. HRESULT HrSend();
  299. HRESULT HrIsCoolToSendHTML();
  300. HRESULT HrCheckSubject(BOOL fMail);
  301. HRESULT HrCheckSendInfo();
  302. HRESULT HrFillMessage(IMimeMessage *pMsg);
  303. HRESULT HrPickNames(int iwell);
  304. HRESULT HrUpdateCachedHeight(HWND hwndEdit, RECT *prc);
  305. HRESULT HrUpdateTooltipPos();
  306. HRESULT HrOfficeInitialize(BOOL fInit);
  307. HRESULT HrGetVCardState(ULONG* pCmdf);
  308. HRESULT HrFillToolbarColor(HDC hdc);
  309. HRESULT HrViewContacts();
  310. void HeaderCapture();
  311. void HeaderRelease(BOOL fForce);
  312. void ShowControls();
  313. void RelayToolTip(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  314. void SetPosOfControls(int headerWidth, BOOL fChangeVisibleStates);
  315. void SetDirtyFlag();
  316. int GetRightMargin(BOOL fMax);
  317. BOOL IsReadOnly();
  318. // security
  319. HRESULT HrInitSecurityOptions(LPMIMEMESSAGE pMsg, ULONG ulSecurityType);
  320. HRESULT HrInitSecurity();
  321. HRESULT HrHandleSecurityIDMs(BOOL fDigsign);
  322. HRESULT HrSaveSecurity(LPMIMEMESSAGE pMsg);
  323. HRESULT HrUpdateSecurity(LPMIMEMESSAGE pMsg=NULL);
  324. LPWSTR SzGetDisplaySec(LPMIMEMESSAGE pMsg, int *pidsLabel);
  325. HACCEL GetAcceleratorTable();
  326. BOOL FDoCutCopyPaste(int wmCmd);
  327. HRESULT ShowEnvOptions();
  328. void ReLayout();
  329. HRESULT UnloadAll();
  330. void InvalidateRightMargin(int additionalWidth);
  331. void InvalidateStatus();
  332. DWORD GetButtonUnderMouse(int x, int y);
  333. void GetButtonRect(DWORD iBtn, RECT *prc);
  334. int BeginYPos();
  335. void HandleButtonClicks(int x, int y, int iBtn);
  336. void _UpdateTextFields(BOOL fSetWabal);
  337. void _SetEmptyFieldStrings(void);
  338. void _AddRecipTypeToMenu(HMENU hmenu);
  339. HRESULT _CreateEnvToolbar();
  340. HRESULT _LoadFromStream(IStream *pstm);
  341. HRESULT _SetButtonText(int idmCmd, LPSTR pszText);
  342. HRESULT _ConvertOfficeCmdIDToOE(LPDWORD pdwCmdId);
  343. HRESULT _UIActivate(BOOL fActive, HWND hwndFocus);
  344. HWND _GetNextDlgTabItem(HWND hwndDlg, HWND hwndFocus, BOOL fShift);
  345. HRESULT _HandsOffComponentMgr();
  346. int _GetLeftMargin();
  347. HIMAGELIST _CreateToolbarBitmap(int idb, int cx);
  348. HRESULT _ClearDirtyFlag();
  349. HRESULT _RegisterAsDropTarget(BOOL fOn);
  350. HRESULT _RegisterWithFontCache(BOOL fOn);
  351. HRESULT _RegisterWithComponentMgr(BOOL fOn);
  352. HRESULT _GetMsoBody(ULONG uBody, LPSTREAM *ppstm);
  353. #ifdef YST
  354. HRESULT _CheckMsoBodyCharsetConflict(CODEPAGEID cpID);
  355. #endif
  356. HRESULT _UnicodeSafeSave(IMimeMessage *pMsg, BOOL fCheckConflictOnly);
  357. };
  358. void GetUSKeyboardLayout(HKL *phkl);
  359. // note header WM_COMMAND parent notifications
  360. #define NHD_FIRST 0
  361. #define NHD_SIZECHANGE (NHD_FIRST + 1)
  362. #endif //_HEADER_H