|
|
// ==============================================================================
// MIMEOLE'd Attachment Manger v2. - brettm
// ==============================================================================
#ifndef __ATTMAN_H
#define __ATTMAN_H
// ==============================================================================
// Depends On
// ==============================================================================
#include "mimeolep.h"
#define ATTN_RESIZEPARENT 10000
// from common\dragdrop.h
typedef struct tagDATAOBJINFO *PDATAOBJINFO;
// ==============================================================================
// Defines
// ==============================================================================
//#define BASE_ATTACH_CMD_ID (ULONG)(WM_USER + 1)
// ==============================================================================
// CAttMan Definition
// ==============================================================================
class CAttMan : public IDropSource, public IPersistMime { public: // *** IUnknown methods ***
HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void **ppvObject); ULONG STDMETHODCALLTYPE AddRef(void); ULONG STDMETHODCALLTYPE Release(void);
// *** IDropSource methods ***
HRESULT STDMETHODCALLTYPE QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState); HRESULT STDMETHODCALLTYPE GiveFeedback(DWORD dwEffect);
// IPersistMime
HRESULT STDMETHODCALLTYPE Load(LPMIMEMESSAGE pMsg); HRESULT STDMETHODCALLTYPE Save(LPMIMEMESSAGE pMsg, DWORD dwFlags); HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClsID);
CAttMan (); ~CAttMan ();
// Load function, unload and close
HRESULT HrInit (HWND hwnd, BOOL fReadOnly, BOOL fDeleteVCards, BOOL fAllowUnsafe); HRESULT HrUnload(); HRESULT HrClose();
HRESULT HrIsDragSource();
HRESULT HrGetAttachCount(ULONG *pcAttach); HRESULT HrIsDirty(); HRESULT HrClearDirtyFlag();
LPTSTR GetUnsafeAttachList(); ULONG GetUnsafeAttachCount();
// handling of windows messages
BOOL WMCommand(HWND hwndCmd, INT id, WORD wCmd); BOOL WMNotify(int idFrom, NMHDR *pnmhdr); BOOL WMContextMenu (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
static BOOL CALLBACK InsertFileDlgHookProc(HWND, UINT, WPARAM, LPARAM);
// handlign of WM_DROPFILE
HRESULT HrDropFiles(HDROP hDrop, BOOL fMakeLinks);
// toobar and menu update
HRESULT HrUpdateToolbar(HWND);
// external sizing
HRESULT HrGetHeight(INT cxWidth, ULONG *pcy); HRESULT HrSetSize (RECT *prc);
HWND Hwnd() {return m_hwndList;};
// enable flags for the browser menus
HRESULT HrCmdEnabled(UINT idm, LPBOOL pbEnable); HRESULT HrFVCard(); HRESULT HrShowVCardProp(); HRESULT HrCheckVCardExists(BOOL fMail); HRESULT GetTabStopArray(HWND *rgTSArray, int *pcArrayCount); HRESULT HrAddAttachment (LPWSTR lpszPathName, LPSTREAM pstm, BOOL fShortCut); HRESULT HrSwitchView(DWORD dwView); HRESULT HrGetRequiredAction(DWORD *pdwEffect, POINTL pt); HRESULT HrDropFileDescriptor(LPDATAOBJECT pDataObj, BOOL fLink); HRESULT CheckAttachNameSafeWithCP(CODEPAGEID cpID);
private: LPMIMEMESSAGE m_pMsg; HIMAGELIST m_himlSmall; HIMAGELIST m_himlLarge; ULONG m_cRef; HWND m_hwndList, m_hwndParent; // we stuff this for UI when there's no m_hwndList
CLIPFORMAT m_cfAccept; DWORD m_dwDragType, m_grfKeyState, m_dwEffect; int m_cxMaxText, m_cyHeight; BOOL m_fReadOnly :1, m_fDirty :1, m_fDragSource :1, m_fDropTargetRegister :1, m_fShowingContext :1, m_fRightClick :1, m_fModal :1, m_fDeleteVCards :1, m_fWarning :1, m_fSafeOnly :1; LPATTACHDATA *m_rgpAttach; ULONG m_cAttach, m_cAlloc, m_cUnsafeAttach; HMENU m_hMenuSaveAttach; INT m_iVCard; LPTSTR m_szUnsafeAttachList;
// Listview stuff
HRESULT HrInitImageLists(); HRESULT HrFillListView(); HRESULT HrCreateListView(HWND hwnd); HRESULT HrAddToList(LPATTACHDATA pAttach, BOOL fIniting); HRESULT HrBuildAttachList();
// menu stuff
HRESULT HrGetAttMenu(HMENU *phMenu, BOOL fContextMenu); HRESULT HrCleanMenu(HMENU hMenu); HRESULT HrGetAttachmentById(HMENU hMenu, ULONG id, HBODY *phBody); HRESULT HrGetItemTextExtent(HWND hwnd, LPSTR szDisp, LPSIZE pSize); HRESULT HrAttachFromMenuID(int idm, LPATTACHDATA *ppAttach);
HRESULT HrInsertFile(); HRESULT HrRemoveAttachments(); HRESULT HrRemoveAttachment(int ili); HRESULT HrDeleteAttachments();
HRESULT HrExecFile(int iVerb);
HRESULT HrInsertFileFromStgMed(LPWSTR pwszFileName, LPSTGMEDIUM pstgmed, BOOL fLink); HRESULT HrBeginDrag(); HRESULT HrBuildHDrop(PDATAOBJINFO *ppdoi);
HRESULT HrResizeParent(); HRESULT HrDblClick(int idFrom, NMHDR *pnmhdr);
HRESULT HrCheckVCard();
// data table
HRESULT HrFreeAllData(); HRESULT HrAddData(HBODY hAttach); HRESULT HrAddData(LPWSTR lpszPathName, LPSTREAM pstm, LPATTACHDATA *ppAttach); HRESULT HrAllocNewEntry(LPATTACHDATA pAttach);
// Attachment commands
HRESULT HrDoVerb(LPATTACHDATA pAttach, INT nVerb); HRESULT HrSaveAs(LPATTACHDATA lpAttach); HRESULT HrGetTempFile(LPATTACHDATA lpAttach); HRESULT HrCleanTempFile(LPATTACHDATA lpAttach); HRESULT HrSave(HBODY hAttach, LPWSTR lpszFileName);
};
typedef CAttMan *LPATTMAN;
#endif __ATTMAN_H
|