315 lines
14 KiB
C++
315 lines
14 KiB
C++
#ifndef _NOTE_H_
|
|
#define _NOTE_H_
|
|
|
|
#include "imsgsite.h"
|
|
#include "ibodyopt.h"
|
|
#include "iheader.h"
|
|
#include "statbar.h"
|
|
#include "ibodyobj.h"
|
|
#include "msgsite.h"
|
|
#include "options.h"
|
|
#include "acctutil.h"
|
|
#include "dllmain.h"
|
|
#include "tbbands.h"
|
|
#include "msident.h"
|
|
#include "storutil.h"
|
|
|
|
enum NOTEINITSTATE
|
|
{
|
|
NIS_INIT = -1,
|
|
NIS_NORMAL = 0,
|
|
NIS_FIXFOCUS = 1
|
|
};
|
|
|
|
// As header, body and attman add additional items that should
|
|
// be included in the tab order, these items might need to
|
|
// be increased
|
|
const int MAX_HEADER_COMP = 11;
|
|
const int MAX_BODY_COMP = 1;
|
|
const int MAX_ATTMAN_COMP = 1;
|
|
|
|
class COEMsgSite;
|
|
interface IBodyObj2;
|
|
|
|
class CNote :
|
|
public IOENote,
|
|
public IBodyOptions,
|
|
public IDropTarget,
|
|
public IHeaderSite,
|
|
public IPersistMime,
|
|
public IServiceProvider,
|
|
public IDockingWindowSite,
|
|
public IMimeEditEventSink,
|
|
public IIdentityChangeNotify,
|
|
public IOleCommandTarget,
|
|
public IStoreCallback,
|
|
public ITimeoutCallback
|
|
{
|
|
public:
|
|
CNote();
|
|
~CNote();
|
|
|
|
// IUnknown
|
|
virtual ULONG STDMETHODCALLTYPE AddRef();
|
|
virtual ULONG STDMETHODCALLTYPE Release();
|
|
virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID, LPVOID FAR *);
|
|
|
|
// IOENote
|
|
virtual HRESULT STDMETHODCALLTYPE Init(DWORD action, DWORD dwCreateFlags, RECT *prc, HWND hwnd,
|
|
INIT_MSGSITE_STRUCT *pInitStruct, IOEMsgSite *pMsgSite,
|
|
IUnknown *punkPump);
|
|
virtual HRESULT STDMETHODCALLTYPE Show(void);
|
|
virtual HRESULT ToggleToolbar(void);
|
|
|
|
// IBodyOptions
|
|
virtual HRESULT STDMETHODCALLTYPE SignatureEnabled(BOOL fAuto);
|
|
virtual HRESULT STDMETHODCALLTYPE GetSignature(LPCSTR szSigID, LPDWORD pdwSigOptions, BSTR *pbstr);
|
|
virtual HRESULT STDMETHODCALLTYPE GetMarkAsReadTime(LPDWORD pdwSecs);
|
|
virtual HRESULT STDMETHODCALLTYPE GetFlags(LPDWORD pdwFlags);
|
|
virtual HRESULT STDMETHODCALLTYPE GetInfo(BODYOPTINFO *pBOI);
|
|
virtual HRESULT STDMETHODCALLTYPE GetAccount(IImnAccount **ppAcct);
|
|
|
|
// IHeaderSite
|
|
virtual HRESULT STDMETHODCALLTYPE Resize(void);
|
|
virtual HRESULT STDMETHODCALLTYPE Update(void);
|
|
virtual HRESULT STDMETHODCALLTYPE OnUIActivate();
|
|
virtual HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL);
|
|
virtual HRESULT STDMETHODCALLTYPE IsHTML(void);
|
|
virtual HRESULT STDMETHODCALLTYPE SetHTML(BOOL);
|
|
virtual HRESULT STDMETHODCALLTYPE SaveAttachment(void);
|
|
virtual HRESULT STDMETHODCALLTYPE IsModal();
|
|
virtual HRESULT STDMETHODCALLTYPE CheckCharsetConflict();
|
|
virtual HRESULT STDMETHODCALLTYPE ChangeCharset(HCHARSET hCharset);
|
|
virtual HRESULT STDMETHODCALLTYPE GetCharset(HCHARSET *phCharset);
|
|
#ifdef SMIME_V3
|
|
virtual HRESULT STDMETHODCALLTYPE GetLabelFromNote(PSMIME_SECURITY_LABEL *plabel);
|
|
virtual HRESULT STDMETHODCALLTYPE IsSecReceiptRequest(void);
|
|
virtual HRESULT STDMETHODCALLTYPE IsForceEncryption(void);
|
|
#endif
|
|
|
|
// IPersistMime
|
|
virtual HRESULT STDMETHODCALLTYPE IsDirty(void);
|
|
virtual HRESULT STDMETHODCALLTYPE Load(LPMIMEMESSAGE);
|
|
virtual HRESULT STDMETHODCALLTYPE Save(LPMIMEMESSAGE, DWORD);
|
|
virtual HRESULT STDMETHODCALLTYPE InitNew(void);
|
|
virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClsID);
|
|
|
|
// IDropTarget methods
|
|
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);
|
|
|
|
// IServiceProvider
|
|
HRESULT STDMETHODCALLTYPE QueryService(REFGUID rsid, REFIID riid, void **ppvObj);
|
|
|
|
// IMimeEditEventSink
|
|
HRESULT STDMETHODCALLTYPE EventOccurred(DWORD cmdID, IMimeMessage *pMessage);
|
|
|
|
// IIdentityChangeNotify
|
|
HRESULT STDMETHODCALLTYPE QuerySwitchIdentities();
|
|
HRESULT STDMETHODCALLTYPE SwitchIdentities();
|
|
HRESULT STDMETHODCALLTYPE IdentityInformationChanged(DWORD dwType);
|
|
|
|
// IOleCommandTarget
|
|
HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *, ULONG, OLECMD prgCmds[], OLECMDTEXT *);
|
|
HRESULT STDMETHODCALLTYPE Exec(const GUID *, DWORD, DWORD, VARIANTARG *, VARIANTARG *);
|
|
|
|
// IDockingWindowSite (also IOleWindow)
|
|
HRESULT STDMETHODCALLTYPE GetBorderDW(IUnknown* punkSrc, LPRECT lprectBorder);
|
|
HRESULT STDMETHODCALLTYPE RequestBorderSpaceDW(IUnknown* punkSrc, LPCBORDERWIDTHS pborderwidths);
|
|
HRESULT STDMETHODCALLTYPE SetBorderSpaceDW(IUnknown* punkSrc, LPCBORDERWIDTHS pborderwidths);
|
|
|
|
// IOleWindow methods
|
|
HRESULT STDMETHODCALLTYPE GetWindow (HWND * lphwnd);
|
|
HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode) {return E_NOTIMPL;};
|
|
|
|
// IStoreCallback methods
|
|
HRESULT STDMETHODCALLTYPE OnBegin(STOREOPERATIONTYPE tyOperation, STOREOPERATIONINFO *pOpInfo, IOperationCancel *pCancel);
|
|
HRESULT STDMETHODCALLTYPE OnProgress(STOREOPERATIONTYPE tyOperation, DWORD dwCurrent, DWORD dwMax, LPCSTR pszStatus);
|
|
HRESULT STDMETHODCALLTYPE OnTimeout(LPINETSERVER pServer, LPDWORD pdwTimeout, IXPTYPE ixpServerType);
|
|
HRESULT STDMETHODCALLTYPE CanConnect(LPCSTR pszAccountId, DWORD dwFlags);
|
|
HRESULT STDMETHODCALLTYPE OnLogonPrompt(LPINETSERVER pServer, IXPTYPE ixpServerType);
|
|
HRESULT STDMETHODCALLTYPE OnComplete(STOREOPERATIONTYPE tyOperation, HRESULT hrComplete, LPSTOREOPERATIONINFO pOpInfo, LPSTOREERROR pErrorInfo);
|
|
HRESULT STDMETHODCALLTYPE OnPrompt(HRESULT hrError, LPCTSTR pszText, LPCTSTR pszCaption, UINT uType, INT *piUserResponse);
|
|
HRESULT STDMETHODCALLTYPE GetParentWindow(DWORD dwReserved, HWND *phwndParent);
|
|
|
|
// ITimeoutCallback
|
|
HRESULT STDMETHODCALLTYPE OnTimeoutResponse(TIMEOUTRESPONSE eResponse);
|
|
|
|
HRESULT TranslateAccelerator(LPMSG lpmsg);
|
|
static LRESULT EXPORT_16 CALLBACK ExtNoteWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
|
HRESULT IsMenuMessage(MSG *lpmsg);
|
|
|
|
protected:
|
|
BOOL IsFlagged(DWORD dwFlag = ARF_FLAGGED);
|
|
BOOL FCanClose();
|
|
BOOL IsReplyNote();
|
|
BOOL DoProperties();
|
|
BOOL WMCreate(HWND hwnd);
|
|
|
|
void WMNCDestroy();
|
|
void FormatSettings();
|
|
void ToggleFormatbar();
|
|
void ToggleStatusbar();
|
|
void OnDocumentReady();
|
|
void InitSendAndBccBtns();
|
|
void DeferedLanguageMenu();
|
|
void DisableSendNoteOnlyMenus();
|
|
|
|
void WMSize(int, int, BOOL);
|
|
void RemoveNewMailIcon(void);
|
|
void SwitchLanguage(int idm);
|
|
void SetProgressPct(INT iPct);
|
|
void SetStatusText(LPSTR szBuf);
|
|
void GetNoteMenu(HMENU *phmenu);
|
|
void ShowErrorScreen(HRESULT hr);
|
|
void WMGetMinMaxInfo(LPMINMAXINFO pmmi);
|
|
void WMNotify(int idFrom, NMHDR *pnmhdr);
|
|
void UpdateMsgOptions(LPMIMEMESSAGE pMsg);
|
|
void ReloadMessageFromSite(BOOL fOriginal = FALSE);
|
|
void ChangeReadToComposeIfUnsent(IMimeMessage *pMsg);
|
|
void EnableNote(BOOL fEnable);
|
|
HRESULT _SetPendingOp(STOREOPERATIONTYPE tyOperation);
|
|
|
|
void _OnComplete(STOREOPERATIONTYPE tyOperation, HRESULT hrComplete) ;
|
|
|
|
HRESULT InitBodyObj();
|
|
HRESULT OnKillFocus();
|
|
HRESULT UpdateTitle();
|
|
HRESULT SaveMessage(DWORD dwSaveFlags);
|
|
HRESULT SaveMessageAs();
|
|
HRESULT ClearDirtyFlag();
|
|
HRESULT CheckTabStopArrays();
|
|
HRESULT CommitChangesInNote();
|
|
HRESULT InitMenusAndToolbars();
|
|
HRESULT SetComposeStationery();
|
|
|
|
HRESULT HrSendMail(int idm);
|
|
HRESULT OnSetFocus(HWND hwndFrom);
|
|
HRESULT SetCharsetUnicodeIfNeeded(IMimeMessage *pMsg);
|
|
HRESULT CycleThroughControls(BOOL fForward);
|
|
HRESULT InitWindows(RECT *prc, HWND ownerHwnd);
|
|
HRESULT WMCommand(HWND hwndCmd, int id, WORD wCmd);
|
|
HRESULT MarkMessage(MARK_TYPE dwFlags, APPLYCHILDRENTYPE dwApplyType);
|
|
HRESULT HeaderExecCommand(UINT uCmdID, DWORD nCmdExecOpt, VARIANTARG *pvaIn);
|
|
|
|
LRESULT WMInitMenuPopup(HWND, HMENU, UINT);
|
|
LRESULT OnDropDown(HWND hwnd, LPNMHDR lpnmh);
|
|
LRESULT WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
LRESULT OnInitMenuPopup(HWND hwnd, HMENU hmenuPopup, UINT uPos, UINT wID);
|
|
LRESULT NoteDefWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
|
|
|
INT GetRequiredHdrHeight();
|
|
HACCEL GetAcceleratorTable();
|
|
int GetNextIndex(int index, BOOL fForward);
|
|
LONG lTestHook(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
|
BYTE GetNoteType();
|
|
void ResizeChildren(int cxNote, int cyNote, int cy, BOOL fInternal);
|
|
void CheckAndForceEncryption(void);
|
|
private:
|
|
CStatusBar *m_pstatus;
|
|
|
|
// Used to make sure that special pumps for note don't close while note is open.
|
|
// This was initially for the finder.
|
|
IUnknown *m_punkPump;
|
|
|
|
IOEMsgSite *m_pMsgSite;
|
|
IHeader *m_pHdr;
|
|
IMimeMessage *m_pMsg;
|
|
IPersistMime *m_pPrstMime;
|
|
IBodyObj2 *m_pBodyObj2;
|
|
IOleCommandTarget *m_pCmdTargetHdr,
|
|
*m_pCmdTargetBody;
|
|
IDropTarget *m_pDropTargetHdr,
|
|
*m_pTridentDropTarget;
|
|
IOperationCancel *m_pCancel;
|
|
|
|
HTMLOPT m_rHtmlOpt;
|
|
PLAINOPT m_rPlainOpt;
|
|
MARK_TYPE m_dwCBMarkType;
|
|
STOREOPERATIONTYPE m_OrigOperationType;
|
|
|
|
HCHARSET m_hCharset;
|
|
HBITMAP m_hbmBack;
|
|
HICON m_hIcon;
|
|
HCURSOR m_hCursor;
|
|
HTIMEOUT m_hTimeout;
|
|
|
|
LPACCTMENU m_pAcctMenu,
|
|
m_pAcctLater;
|
|
int m_cTabStopCount,
|
|
m_iIndexOfBody;
|
|
NOTEINITSTATE m_nisNoteState;
|
|
CRITICAL_SECTION m_csNoteState;
|
|
HMENU m_hmenuLanguage,
|
|
m_hmenuAccounts,
|
|
m_hmenuLater;
|
|
ULONG m_cRef,
|
|
m_ulPct,
|
|
m_cAcctMenu,
|
|
m_cAcctLater;
|
|
DWORD m_dwNoteCreateFlags,
|
|
m_dwNoteAction,
|
|
m_dwMarkOnReplyForwardState,
|
|
m_dwIdentCookie;
|
|
HWND m_hwnd,
|
|
m_pTabStopArray[MAX_HEADER_COMP+MAX_BODY_COMP+MAX_ATTMAN_COMP],
|
|
m_hwndFocus,
|
|
m_hwndOwner,
|
|
m_hwndToolbar;
|
|
BOOL m_fHtml :1, // Tells whether we are in html mode or not
|
|
m_fMail :1, // This will be removed when the UI is combined
|
|
m_fReadNote :1, // Is this a read note?
|
|
m_fPackageImages :1, // Toggled per note. Use to be m_fSendImages
|
|
m_fUseStationeryFonts :1, // Keep fonts that are in the stationary
|
|
m_fToolbarVisible :1, // Is toolbar visible
|
|
m_fStatusbarVisible :1, // Is status bar visible
|
|
m_fFormatbarVisible :1, // Is the format bar visible
|
|
m_fHeaderUIActive :1, // Are we currently active?
|
|
m_fBypassDropTests :1, // Used to say drop not acceptable. Use to be m_fNoText
|
|
m_fCompleteMsg :1, // Is true if message contains all of message
|
|
m_fTabStopsSet :1, // Have the tab stops been set up???
|
|
m_fBodyContainsFrames :1, // Was previously m_fReadOnlyBody
|
|
m_fOriginallyWasRead :1, // Initial NoteAction was OENA_READ
|
|
m_fCBDestroyWindow :1, // Destroy window after callback complete
|
|
m_fCBCopy :1, // Used during callback complete to tell if copied or moved.
|
|
m_fFlagged :1, // Is message flagged
|
|
m_fFullHeaders :1, // Show full headers
|
|
m_fWindowDisabled :1, // Is the window disabled?
|
|
m_fProgress :1,
|
|
m_fOrgCmdWasDelete :1, // Delete from callback wasn't originally a save or move/copy
|
|
m_fCommitSave :1, // Used to say that when you save, you should call commit
|
|
m_fOnDocReadyHandled :1, // Used in the OnDocumentReady function.
|
|
m_fUseReplyHeaders :1, // Use reply headers
|
|
m_fHasBeenSaved :1, // Is this a message that has been saved (ie ID_SAVE)
|
|
m_fInternal :1, // used to enable/disable thread windows
|
|
m_fSecurityLabel :1, // used for security labels
|
|
m_fSecReceiptRequest :1, // used for security receipt request
|
|
m_fPreventConflictDlg :1, // make sure we only show charset conflictdlg once per save
|
|
m_fForceClose :1; // used when forcing a destory
|
|
|
|
RECT m_rcRebar;
|
|
CBands *m_pToolbarObj;
|
|
HWND m_hwndRebar;
|
|
HMENU m_hMenu;
|
|
HWNDLIST m_hlDisabled;
|
|
DWORD m_dwRequestMDNLocked;
|
|
#ifdef SMIME_V3
|
|
PSMIME_SECURITY_LABEL m_pLabel;
|
|
#endif // SMIME_V3
|
|
};
|
|
|
|
BOOL Note_Init(BOOL);
|
|
HRESULT CreateOENote(IUnknown *pUnkOuter, IUnknown **ppUnknown);
|
|
HRESULT CreateAndShowNote(DWORD dwAction, DWORD dwCreateFlags, INIT_MSGSITE_STRUCT *pInitStruct,
|
|
HWND hwnd = 0, IUnknown *punk = NULL, RECT *prc = NULL, IOEMsgSite *pMsgSite = NULL);
|
|
|
|
void SetTlsGlobalActiveNote(CNote* pNote);
|
|
CNote* GetTlsGlobalActiveNote(void);
|
|
void InitTlsActiveNote();
|
|
void DeInitTlsActiveNote();
|
|
|
|
|
|
#endif |