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
405 lines
15 KiB
#ifndef _HEADER_H
|
|
#define _HEADER_H
|
|
|
|
|
|
#include <richedit.h>
|
|
#ifndef _RICHOLE_H //hack as richole.h has no #ifdef around it
|
|
#define _RICHOLE_H
|
|
#include <richole.h>
|
|
#endif
|
|
|
|
|
|
#include <mimeole.h>
|
|
#include <wells.h>
|
|
#include <addrobj.h>
|
|
#include "iheader.h"
|
|
#include <envelope.h>
|
|
#include <mso.h>
|
|
#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
|