|
|
#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
|