#ifndef _HEADER_H #define _HEADER_H #include #ifndef _RICHOLE_H //hack as richole.h has no #ifdef around it #define _RICHOLE_H #include #endif #include #include #include #include "iheader.h" #include #include #include "secutil.h" #include "tom.h" #include "reutil.h" // // Forwards // interface IImnAccount; class CAttMan; // // Structures and other defintions // enum { // templates for types of note (defines header layout) NT_SENDNOTE=0, NT_READNOTE, NT_NOTECOUNT }; enum { VCardFALSE=0, VCardTRUE, VCardDONTKNOW }; BOOL FHeader_Init(BOOL fInit); HRESULT CreateInstance_Envelope(IUnknown* pUnkOuter, IUnknown** ppUnknown); void HdrSetRichEditText(HWND hwnd, LPWSTR pwchBuff, BOOL fReplace); DWORD HdrGetRichEditText(HWND hwnd, LPWSTR pwchBuff, DWORD dwNumChars, BOOL fSelection); // enumeration of icons in the button image list enum { iimlHdrAddrRolodex=0, iimlHdrNewsRolodex, //iimlHdrNext, }; enum // HCINFO.dwFlags { HCF_MULTILINE =0x0001, HCF_READONLY =0x0002, HCF_HASBUTTON =0x0004, HCF_ADVANCED =0x0008, HCF_ADDRWELL =0x0010, HCF_USECHARSET =0x0020, HCF_OPTIONAL =0x0040, HCF_HIDDEN =0x0080, HCF_COMBO =0x0100, HCF_BORDER =0x0200, HCF_ATTACH =0x0400, HCF_ADDRBOOK =0x0800, HCF_NEWSPICK =0x1000, }; enum { AC_IGNORE =0x01, AC_SELECTION =0x02 }; // header control info structure typedef struct tagHCI { DWORD dwFlags, dwOpt; // valid if HCF_OPTIONAL int idEdit, // id of well idBtn, // id of button (if idsLabel, // id used for label of well idsEmpty, // id of string used for empty well idsTT; // string for tooltip of the well DWORD dwACFlags; // valid if HCF_ADDRWELL BOOL fEmpty; // state info LPRICHEDITOLE preole; // oleinterface; MUST ZeroInit ITextDocument *pDoc; // RichEdit interface for text document int cy, // y pos of the control (and hence the label) height, // y size of control (used when growing control) strlen, // strlen of label strlenEmpty; // strlen of the empty string WCHAR sz[cchHeaderMax+1], // string for label szEmpty[cchHeaderMax+1]; // string for empty state } HCI, *PHCI; class CNoteHdr : public IPersistMime, public IOleCommandTarget, public IHeader, public IMsoEnvelope, public IMsoComponent, public IDropTarget, public IFontCacheNotify { public: // IUnknown HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID FAR *); ULONG STDMETHODCALLTYPE AddRef(); ULONG STDMETHODCALLTYPE Release(); // IPersistMime HRESULT STDMETHODCALLTYPE Load(LPMIMEMESSAGE); HRESULT STDMETHODCALLTYPE Save(LPMIMEMESSAGE, DWORD); HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClsID); // IOleCommandTarget HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *, ULONG, OLECMD prgCmds[], OLECMDTEXT *); HRESULT STDMETHODCALLTYPE Exec(const GUID *, DWORD, DWORD, VARIANTARG *, VARIANTARG *); // IHeader HRESULT STDMETHODCALLTYPE Init(IHeaderSite* pHeaderSite, HWND hwndParent); HRESULT STDMETHODCALLTYPE SetRect(LPRECT); HRESULT STDMETHODCALLTYPE GetRect(LPRECT); HRESULT STDMETHODCALLTYPE SetPriority(UINT pri); HRESULT STDMETHODCALLTYPE GetPriority(UINT* ppri); HRESULT STDMETHODCALLTYPE ShowAdvancedHeaders(BOOL fOn); HRESULT STDMETHODCALLTYPE FullHeadersShowing(void); HRESULT STDMETHODCALLTYPE ChangeLanguage(LPMIMEMESSAGE pMsg); HRESULT STDMETHODCALLTYPE GetTitle(LPWSTR lpszTitle, ULONG cch); HRESULT STDMETHODCALLTYPE UpdateRecipientMenu(HMENU hmenu); HRESULT STDMETHODCALLTYPE SetInitFocus(BOOL fSubject); HRESULT STDMETHODCALLTYPE SetVCard(BOOL fFresh); HRESULT STDMETHODCALLTYPE IsSecured(); HRESULT STDMETHODCALLTYPE IsHeadSigned(); HRESULT STDMETHODCALLTYPE ForceEncryption(BOOL *fEncrypt, BOOL fSet); HRESULT STDMETHODCALLTYPE AddRecipient(int idOffset); HRESULT STDMETHODCALLTYPE GetTabStopArray(HWND *rgTSArray, int *pcArrayCount); HRESULT STDMETHODCALLTYPE SetFlagState(MARK_TYPE markType); HRESULT STDMETHODCALLTYPE WMCommand(HWND, int, WORD); HRESULT STDMETHODCALLTYPE OnDocumentReady(LPMIMEMESSAGE pMsg); HRESULT STDMETHODCALLTYPE DropFiles(HDROP hDrop, BOOL fMakeLinks); HRESULT STDMETHODCALLTYPE HrGetAttachCount(ULONG *pcAttMan); HRESULT STDMETHODCALLTYPE HrIsDragSource(); HRESULT STDMETHODCALLTYPE HrGetAccountInHeader(IImnAccount **ppAcct); // IDropTarget HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); HRESULT STDMETHODCALLTYPE DragOver(DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); HRESULT STDMETHODCALLTYPE DragLeave(void); HRESULT STDMETHODCALLTYPE Drop(IDataObject *pDataObj, DWORD grfKeyState, POINTL pt, DWORD *pdwEffect); // IMsoEnvelope HRESULT STDMETHODCALLTYPE Init(IUnknown* punk, IMsoEnvelopeSite* pesit, DWORD grfInit); HRESULT STDMETHODCALLTYPE SetParent(HWND hwndParent); HRESULT STDMETHODCALLTYPE Resize(LPCRECT prc); HRESULT STDMETHODCALLTYPE Show(BOOL fShow); HRESULT STDMETHODCALLTYPE SetHelpMode(BOOL fEnter); HRESULT STDMETHODCALLTYPE Save(IStream* pstm, DWORD grfSave); HRESULT STDMETHODCALLTYPE GetAttach(const WCHAR* wszName,IStream** ppstm); HRESULT STDMETHODCALLTYPE SetAttach(const WCHAR* wszName,const WCHAR* szFile,IStream** ppstm,DWORD* pgrfAttach); HRESULT STDMETHODCALLTYPE NewAttach(const WCHAR* pwzName,DWORD grfAttach); HRESULT STDMETHODCALLTYPE SetFocus(DWORD grfFocus); HRESULT STDMETHODCALLTYPE GetHeaderInfo(ULONG dispid, DWORD grfHeader, void **ppv); HRESULT STDMETHODCALLTYPE SetHeaderInfo(ULONG dispid, const void *pv); HRESULT STDMETHODCALLTYPE IsDirty(); HRESULT STDMETHODCALLTYPE GetLastError(HRESULT hr, WCHAR __RPC_FAR *wszBuf, ULONG cchBuf); HRESULT STDMETHODCALLTYPE DoDebug(DWORD grfDebug); // IMsoComponent BOOL STDMETHODCALLTYPE FDebugMessage(HMSOINST, UINT, WPARAM, LPARAM); BOOL STDMETHODCALLTYPE FPreTranslateMessage(MSG *); void STDMETHODCALLTYPE OnEnterState(ULONG, BOOL); void STDMETHODCALLTYPE OnAppActivate(BOOL, DWORD); void STDMETHODCALLTYPE OnLoseActivation(); void STDMETHODCALLTYPE OnActivationChange(IMsoComponent *, BOOL, const MSOCRINFO *, BOOL, const MSOCHOSTINFO *, DWORD); BOOL STDMETHODCALLTYPE FDoIdle(DWORD grfidlef); BOOL STDMETHODCALLTYPE FContinueMessageLoop(ULONG, void *, MSG *); BOOL STDMETHODCALLTYPE FQueryTerminate(BOOL); void STDMETHODCALLTYPE Terminate(); HWND STDMETHODCALLTYPE HwndGetWindow(DWORD, DWORD); // IFontCacheNotify HRESULT STDMETHODCALLTYPE OnPreFontChange(void); HRESULT STDMETHODCALLTYPE OnPostFontChange(void); static LRESULT EXPORT_16 CALLBACK ExtCNoteHdrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); static LRESULT EXPORT_16 CALLBACK EditSubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); static LRESULT EXPORT_16 CALLBACK BtnSubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); static LRESULT EXPORT_16 CALLBACK IMESubClassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, PHCI phci); CNoteHdr(); virtual ~CNoteHdr(); private: ULONG m_cRef, m_cHCI, m_cAccountIDs, m_cxLeftMargin; BOOL m_fSendImmediate,//as opposed to sendlater. m_fAdvanced, m_fInSize, m_fDirty, m_fVCard, m_fVCardSave, m_fAutoComplete, m_fMail, m_fSecurityInited, m_fThisHeadDigSigned, m_fThisHeadEncrypted, m_fSignTrusted, m_fEncryptionOK, m_fDigSigned, m_fEncrypted, m_fFlagged, m_fOfficeInit, m_fUIActive, m_fResizing, m_fHandleChange, m_fAddressesChanged, m_fForceEncryption, m_fSkipLayout, m_fStillLoading, m_fDropTargetRegister, m_fShowedUnicodeDialog; HWND m_hwndToolbar, m_hwnd, m_hwndParent, m_hwndTT, m_hwndLastFocus, m_hwndRebar; UINT m_ntNote; DWORD m_dwComponentMgrID, m_dwFontNotify, m_dwIMEStartCount; RECT m_rcCurrentBtn; HWND m_hwndOldCapture; WORD m_wNoteType; INT m_dxTBOffset; int m_pri, m_iCurrComboIndex, m_iUnicodeDialogResult; LPSTR *m_ppAccountIDs; LPWSTR m_lpszSecurityField, m_pszRefs; TCHAR m_szLastLang[cchHeaderMax+1]; PHCI m_rgHCI; CAddrWells *m_pAddrWells; LPWABAL m_lpWabal; SECSTATE m_SecState; HCHARSET m_hCharset; LPMAPITABLE m_pTable; LPWAB m_lpWab; CAttMan *m_lpAttMan; MARK_TYPE m_MarkType; CLIPFORMAT m_cfAccept; DWORD m_dwDragType, m_grfKeyState, m_dwCurrentBtn, m_dwClickedBtn, m_cCapture, m_dwEffect; IHeaderSite *m_pHeaderSite; // valid if athena hosts header IMsoEnvelopeSite *m_pEnvelopeSite; // valid if Office hosts header IImnAccount *m_pAccount; HINITREF m_hInitRef; // Application reference count IMsoComponentManager *m_pMsoComponentMgr; IMimeMessage *m_pMsgSend, *m_pMsg; HIMAGELIST m_himl; BOOL m_fPoster; private: LRESULT CALLBACK CNoteHdrWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); BOOL IsReplyNote(); BOOL WMCreate(); BOOL WMNotify(WPARAM wParam, LPARAM lParam); void WMPaint(); void OnDestroy(); void OnNCDestroy(); BOOL PostWMCreate(); void OnButtonClick(int idBtn); void SetReferences(LPMIMEMESSAGE pMsg); void HrPickGroups(int idWell, BOOL fFollowUpTo); // VCard HRESULT HrShowVCardProperties(HWND hwnd); HRESULT HrShowVCardCtxtMenu(int x, int y); HRESULT HrGetVCardName(LPTSTR pszName, DWORD cch); HRESULT HrOnOffVCard(); HRESULT _AttachVCard(IMimeMessage *pMsg); HRESULT HrInit(IMimeMessage *pMsg); HRESULT HrFShowHeader(PHCI phci); HRESULT HrAutoComplete(HWND hwnd, PHCI pHCI); HRESULT HrUpdateCharSetFonts(HCHARSET hCharset, BOOL fUpdateFields); HRESULT HrInitFieldList(); HRESULT HrFreeFieldList(); HRESULT HrCheckNames(BOOL fSilent, BOOL fSetCheckedFlag); HRESULT HrClearUndoStack(); HRESULT HrNewsSave(LPMIMEMESSAGE pMsg, CODEPAGEID cpID, BOOL fCheckConflictOnly); HRESULT HrCopyNonRecipientHeaders(LPMIMEMESSAGE pMsg); HRESULT HrOfficeLoad(); HRESULT HrAutoAddToWAB(); HRESULT HrSetPri(LPMIMEMESSAGE pMsg); HRESULT HrSetupNote(LPMIMEMESSAGE pMsg); HRESULT HrSetMailRecipients(LPMIMEMESSAGE pMsg); HRESULT HrSetNewsRecipients(LPMIMEMESSAGE pMsg); HRESULT HrSetNewsWabal(LPMIMEMESSAGE pMsg, LPWSTR pwszCC); HRESULT HrSetReplySubject(LPMIMEMESSAGE pMsg, BOOL fReply); HRESULT HrQueryToolbarButtons(DWORD dwFlags, const GUID *pguidCmdGroup, OLECMD* pOleCmd); HRESULT HrGetFieldText(LPWSTR* ppszText, int idHdrCtrl); HRESULT HrGetFieldText(LPWSTR* ppszText, HWND hwnd); HRESULT ResolveGroupNames(HWND hwnd, int idField, FOLDERID idServer, BOOL fPosterAllowed, BOOL *fOneOrMoreNames); HRESULT HrAddSender(); HRESULT HrAddAllOnToList(); HRESULT HrCheckGroups(BOOL fPosting); HRESULT HrSend(); HRESULT HrIsCoolToSendHTML(); HRESULT HrCheckSubject(BOOL fMail); HRESULT HrCheckSendInfo(); HRESULT HrFillMessage(IMimeMessage *pMsg); HRESULT HrPickNames(int iwell); HRESULT HrUpdateCachedHeight(HWND hwndEdit, RECT *prc); HRESULT HrUpdateTooltipPos(); HRESULT HrOfficeInitialize(BOOL fInit); HRESULT HrGetVCardState(ULONG* pCmdf); HRESULT HrFillToolbarColor(HDC hdc); HRESULT HrViewContacts(); void HeaderCapture(); void HeaderRelease(BOOL fForce); void ShowControls(); void RelayToolTip(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); void SetPosOfControls(int headerWidth, BOOL fChangeVisibleStates); void SetDirtyFlag(); int GetRightMargin(BOOL fMax); BOOL IsReadOnly(); // security HRESULT HrInitSecurityOptions(LPMIMEMESSAGE pMsg, ULONG ulSecurityType); HRESULT HrInitSecurity(); HRESULT HrHandleSecurityIDMs(BOOL fDigsign); HRESULT HrSaveSecurity(LPMIMEMESSAGE pMsg); HRESULT HrUpdateSecurity(LPMIMEMESSAGE pMsg=NULL); LPWSTR SzGetDisplaySec(LPMIMEMESSAGE pMsg, int *pidsLabel); HACCEL GetAcceleratorTable(); BOOL FDoCutCopyPaste(int wmCmd); HRESULT ShowEnvOptions(); void ReLayout(); HRESULT UnloadAll(); void InvalidateRightMargin(int additionalWidth); void InvalidateStatus(); DWORD GetButtonUnderMouse(int x, int y); void GetButtonRect(DWORD iBtn, RECT *prc); int BeginYPos(); void HandleButtonClicks(int x, int y, int iBtn); void _UpdateTextFields(BOOL fSetWabal); void _SetEmptyFieldStrings(void); void _AddRecipTypeToMenu(HMENU hmenu); HRESULT _CreateEnvToolbar(); HRESULT _LoadFromStream(IStream *pstm); HRESULT _SetButtonText(int idmCmd, LPSTR pszText); HRESULT _ConvertOfficeCmdIDToOE(LPDWORD pdwCmdId); HRESULT _UIActivate(BOOL fActive, HWND hwndFocus); HWND _GetNextDlgTabItem(HWND hwndDlg, HWND hwndFocus, BOOL fShift); HRESULT _HandsOffComponentMgr(); int _GetLeftMargin(); HIMAGELIST _CreateToolbarBitmap(int idb, int cx); HRESULT _ClearDirtyFlag(); HRESULT _RegisterAsDropTarget(BOOL fOn); HRESULT _RegisterWithFontCache(BOOL fOn); HRESULT _RegisterWithComponentMgr(BOOL fOn); HRESULT _GetMsoBody(ULONG uBody, LPSTREAM *ppstm); #ifdef YST HRESULT _CheckMsoBodyCharsetConflict(CODEPAGEID cpID); #endif HRESULT _UnicodeSafeSave(IMimeMessage *pMsg, BOOL fCheckConflictOnly); }; void GetUSKeyboardLayout(HKL *phkl); // note header WM_COMMAND parent notifications #define NHD_FIRST 0 #define NHD_SIZECHANGE (NHD_FIRST + 1) #endif //_HEADER_H