pjs/cmd/winfe/mailmisc.h

549 строки
15 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef __MAILMISC_H
#define __MAILMISC_H
#include "outliner.h"
#include "msgcom.h"
#define ID_COLUMN_FROM 1
#define ID_COLUMN_SUBJECT 2
#define ID_COLUMN_DATE 3
#define ID_COLUMN_READ 4
#define ID_COLUMN_THREAD 5
#define ID_COLUMN_PRIORITY 6
#define ID_COLUMN_STATUS 7
#define ID_COLUMN_LENGTH 8
#define ID_COLUMN_COUNT 9
#define ID_COLUMN_UNREAD 10
#define ID_COLUMN_FOLDER 11
#define ID_COLUMN_MARK 12
#define ID_COLUMN_SLAMMER 13
// array of indexes for IDB_MAILNEWS
#define IDX_LOCALMAIL 0
#define IDX_REMOTEMAIL 1
#define IDX_NEWSHOST 2
#define IDX_MAILMESSAGE 3
#define IDX_MAILREAD 4
#define IDX_DRAFT 5
#define IDX_NEWSGROUP 6
#define IDX_NEWSARTICLE 7
#define IDX_NEWSGROUPNEW 8
#define IDX_NEWSNEW 9
#define IDX_NEWSREAD 10
#define IDX_UNREAD 11
#define IDX_READ 12
#define IDX_MARKED 13
#define IDX_CHECKMARK 14
#define IDX_CHECKBOX 15
#define IDX_MAILFOLDERCLOSED 16
#define IDX_MAILFOLDEROPEN 17
#define IDX_MAILFOLDERCLOSEDNEW 18
#define IDX_MAILFOLDEROPENNEW 19
#define IDX_INBOXCLOSED 20
#define IDX_INBOXOPEN 21
#define IDX_INBOXCLOSEDNEW 22
#define IDX_INBOXOPENNEW 23
#define IDX_OUTBOXCLOSED 24
#define IDX_OUTBOXOPEN 25
#define IDX_SENTCLOSED 26
#define IDX_SENTOPEN 27
#define IDX_DRAFTSCLOSED 28
#define IDX_DRAFTSOPEN 29
#define IDX_TRASH 30
#define IDX_TRASHOPEN 31
#define IDX_THREADCLOSED 32
#define IDX_THREADOPEN 33
#define IDX_THREADCLOSEDNEW 34
#define IDX_THREADOPENNEW 35
#define IDX_THREADWATCHED 36
#define IDX_THREADWATCHEDNEW 37
#define IDX_TWISTYOPEN 38
#define IDX_TWISTYCLOSED 39
#define IDX_MAILNEW 40
#define IDX_COLLECTION 41
#define IDX_CONTAINER 42
#define IDX_SECNEWS 43
#define IDX_THREADIGNOREDCLOSED 44
#define IDX_THREADIGNOREDOPEN 45
#define IDX_OFFLINENEWS 46
#define IDX_FOLDEROPENOFFLINE 47
#define IDX_FOLDERCLOSEDOFFLINE 48
#define IDX_MAILOFFLINE 49
#define IDX_NEWSHOSTOFFLINE 50
#define IDX_NEWSMSGOFFLINE 51
#define IDX_NEWSREADOFFLINE 52
#define IDX_MAILREADOFFLINE 53
#define IDX_MAILMSGOFFLINE 54
#define IDX_IMAPMSGDELETED 55
#define IDX_TEMPLATE 56
#define IDX_TEMPLATEOPEN 57
// array of indexes for IDB_MAILCOL
#define IDX_THREAD 0
#define IDX_MAILCHECKMARK 1
#define IDX_MAILMARKED 2
#define IDX_MAILUNREAD 3
#define IDX_UNTHREAD 4
#define NETSCAPE_MESSAGE_FORMAT "Netscape Message"
#define NETSCAPE_FOLDER_FORMAT "Netscape Folder"
#define NETSCAPE_SEARCH_FORMAT "Netscape Search"
int WFE_MSGTranslateFolderIcon( uint8 level, int32 iFlags, BOOL bOpen );
void WFE_MSGBuildMessagePopup( HMENU hmenu, BOOL bNews, BOOL bInHeaders = FALSE );
///////////////////////////////////////////////////////////////////////
// CMessagePrefs
class CMsgPrefs {
private:
MSG_Master *m_pMaster;
public:
CMsgPrefs();
~CMsgPrefs();
void Init();
void Shutdown();
BOOL IsValid() const;
MSG_Master *GetMaster();
CGenericDocTemplate *m_pFolderTemplate;
CGenericDocTemplate *m_pThreadTemplate;
CGenericDocTemplate *m_pMsgTemplate;
// Lib Msg prefs structure
MSG_Prefs *m_pMsgPrefs;
// Biff Context
MWContext *m_pBiffContext;
CString m_csMailDir;
CString m_csMailHost;
CString m_csNewsDir;
CString m_csNewsHost;
CString m_csUsersEmailAddr;
CString m_csUsersFullName;
CString m_csUsersOrganization;
LPSTR m_pszUserSig;
BOOL m_bThreadPaneMaxed;
BOOL m_bMessageReuse;
BOOL m_bThreadReuse;
};
extern CMsgPrefs g_MsgPrefs;
typedef struct {
MSG_Pane *m_pane;
int m_count;
MSG_ViewIndex *m_indices;
} MailNewsDragData;
///////////////////////////////////////////////////////////////////////
// CMailNewsOutliner
class CMailNewsOutliner: public CMSelectOutliner
{
protected:
MSG_Pane *m_pPane;
int m_iMysticPlane;
BOOL m_bSelChanged;
int m_iSelBlock;
BOOL m_bExpandOrCollapse;
public:
CMailNewsOutliner();
~CMailNewsOutliner();
virtual void SetPane( MSG_Pane *pane );
MSG_Pane *GetPane() { return m_pPane; }
virtual void MysticStuffStarting( XP_Bool asynchronous,
MSG_NOTIFY_CODE notify,
MSG_ViewIndex where,
int32 num);
virtual void MysticStuffFinishing( XP_Bool asynchronous,
MSG_NOTIFY_CODE notify,
MSG_ViewIndex where,
int32 num);
int GetMysticStuffDepth() const { return m_iMysticPlane; }
void BlockSelNotify(BOOL bBlock) { m_iSelBlock += (bBlock ? 1 : -1); }
protected:
// Basic Overrides
virtual int ToggleExpansion( int iLine );
virtual int Expand( int iLine );
virtual int Collapse( int iLine );
afx_msg BOOL OnSetCursor( CWnd* pWnd, UINT nHitTest, UINT message );
afx_msg void OnLButtonDown( UINT nFlags, CPoint point );
afx_msg void OnRButtonDown( UINT nFlags, CPoint point );
afx_msg void OnKeyDown( UINT nChar, UINT nRepCnt, UINT nFlags );
afx_msg void OnKeyUp( UINT nChar, UINT nRepCnt, UINT nFlags );
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////////////////////////////////////
// CFolderOutliner
class CFolderOutliner : public CMailNewsOutliner
{
protected:
MSG_FolderLine m_FolderLine;
OutlinerAncestorInfo * m_pAncestor;
LPTSTR m_pszExtraText;
CLIPFORMAT m_cfMessages, m_cfFolders, m_cfSearchMessages;
DWORD m_dwPrevTime;
UINT m_uTimer;
BOOL m_bLButtonDown;
BOOL m_bDoubleClicked;
BOOL m_b3PaneParent;
int m_nCurrentSelected;
MSG_FolderInfo **m_pMysticStuff;
MSG_FolderInfo *m_MysticFocus;
MSG_FolderInfo *m_MysticSelection;
public:
CFolderOutliner ( );
~CFolderOutliner ( );
BOOL IsParent3PaneFrame() { return m_b3PaneParent; }
void SetCurrentSelected(int nIndex) { m_nCurrentSelected = nIndex; }
int GetCurrentSelected() { return m_nCurrentSelected; }
virtual void MysticStuffStarting( XP_Bool asynchronous,
MSG_NOTIFY_CODE notify,
MSG_ViewIndex where,
int32 num );
virtual void MysticStuffFinishing( XP_Bool asynchronous,
MSG_NOTIFY_CODE notify,
MSG_ViewIndex where,
int32 num );
protected:
virtual void OnSelChanged();
virtual void OnSelDblClk();
// Tree Info stuff
virtual int GetDepth( int iLine );
virtual int GetNumChildren( int iLine );
virtual BOOL IsCollapsed( int iLine );
virtual LPCTSTR GetColumnText( UINT iColumn, void * pLineData );
virtual LPCTSTR GetColumnTip( UINT iColumn, void * pLineData );
virtual void * AcquireLineData( int iLine );
virtual void ReleaseLineData( void * pLineData );
virtual void GetTreeInfo( int iLine, uint32 * pFlags, int * iDepth,
OutlinerAncestorInfo ** pAncestor );
virtual HFONT GetLineFont ( void * pLineData );
virtual int TranslateIcon ( void *);
virtual int TranslateIconFolder ( void *);
virtual void PropertyMenu ( int iSel, UINT flags );
// Drag-Drop Stuff
// clip format
virtual void InitializeClipFormats(void);
virtual CLIPFORMAT * GetClipFormatList(void);
// initiate drag
virtual COleDataSource * GetDataSource(void);
// accept drop
virtual DROPEFFECT DropSelect(int iLineNo, COleDataObject *object);
virtual void AcceptDrop(int iLineNo, COleDataObject *object, DROPEFFECT effect);
afx_msg int OnCreate(LPCREATESTRUCT lpcs);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////////////////////////////////////
// CMessageOutliner
class CMessageOutliner : public CMailNewsOutliner
{
protected:
MSG_MessageLine m_MessageLine;
OutlinerAncestorInfo * m_pAncestor;
LPTSTR m_pszExtraText;
CLIPFORMAT m_cfMessages;
MessageKey *m_pMysticStuff;
MessageKey m_MysticFocus;
MessageKey m_MysticSelection;
BOOL m_bNews, m_bDrafts;
UINT m_uTimer;
BOOL m_bLButtonDown;
BOOL m_bDoubleClicked;
int m_nCurrentSelected;
DWORD m_dwPrevTime;
public:
CMessageOutliner ( );
~CMessageOutliner ( );
virtual void MysticStuffStarting( XP_Bool asynchronous,
MSG_NOTIFY_CODE notify,
MSG_ViewIndex where,
int32 num);
virtual void MysticStuffFinishing( XP_Bool asynchronous,
MSG_NOTIFY_CODE notify,
MSG_ViewIndex where,
int32 num);
void SetCurrentSelected(int nIndex) { m_nCurrentSelected = nIndex; }
int GetCurrentSelected() { return m_nCurrentSelected; }
void SelectThread( int iLine, UINT flags = 0 );
void SelectFlagged();
BOOL IsNews() const { return m_bNews; }
void SetNews(BOOL bNews) { m_bNews = bNews;}
void EnsureFlagsVisible();
protected:
virtual void OnSelChanged();
virtual void OnSelDblClk();
// Tree Info stuff
virtual int GetDepth( int iLine );
virtual int GetNumChildren( int iLine );
virtual int GetParentIndex( int iLine );
virtual BOOL IsCollapsed( int iLine );
// Tree manip stuff
virtual int ExpandAll( int iLine );
virtual int CollapseAll( int iLine );
virtual LPCTSTR GetColumnText ( UINT iColumn, void * pLineData );
virtual void * AcquireLineData ( int iLine );
virtual void ReleaseLineData ( void * pLineData );
virtual void GetTreeInfo ( int iLine, uint32 * pFlags, int * iDepth,
OutlinerAncestorInfo ** pAncestor );
virtual HFONT GetLineFont ( void * pLineData );
virtual int TranslateIcon ( void *);
virtual int TranslateIconFolder ( void *);
virtual BOOL RenderData ( UINT iColumn, CRect & rect, CDC & pdc, LPCTSTR );
virtual BOOL ColumnCommand ( int iColumn, int iLine );
virtual void PropertyMenu ( int iSel, UINT flags );
// Drag Drop stuff
// clip formats
virtual void InitializeClipFormats(void);
virtual CLIPFORMAT * GetClipFormatList(void);
// initiate drag
virtual COleDataSource * GetDataSource(void);
// accept drop
virtual DROPEFFECT DropSelect( int iLineNo, COleDataObject *object );
virtual void AcceptDrop( int iLineNo, COleDataObject *object, DROPEFFECT effect );
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////////////////////////////////////
// CFolderOutlinerParent
class CFolderOutlinerParent : public COutlinerParent
{
public:
CFolderOutlinerParent();
~CFolderOutlinerParent();
virtual COutliner *GetOutliner();
virtual void CreateColumns ( void );
protected:
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
// CMessageOutlinerParent
class CMessageOutlinerParent : public COutlinerParent
{
protected:
MWContextType m_contextType;
public:
CMessageOutlinerParent();
~CMessageOutlinerParent();
virtual COutliner *GetOutliner();
virtual void CreateColumns ( void );
virtual BOOL RenderData ( int idColumn, CRect & rect, CDC & dc, LPCTSTR );
protected:
virtual BOOL ColumnCommand ( int iColumn );
afx_msg void OnDestroy();
DECLARE_MESSAGE_MAP()
};
///////////////////////////////////////////////////////////////////////
// CFolderView
class CFolderView : public COutlinerView
{
public:
CFolderView ( )
{
m_pOutlinerParent = (COutlinerParent *) new CFolderOutlinerParent;
}
DECLARE_DYNCREATE(CFolderView)
};
/////////////////////////////////////////////////////////////////////////////
// CMailFolderHelper
//
// It's such a pain to use the same owner draw routines for a combo box
// and a list using MFC. This just pulls out the important stuff into its
// own, multiple inheritable class
class CMailFolderHelper {
protected:
BOOL m_bStaticCtl;
UINT m_nAddString, m_nSetItemData, m_nResetContent;
int m_iInitialDepth;
MSG_Master *m_pMaster;
LPIMAGEMAP m_pIImageMap;
LPUNKNOWN m_pIImageUnk;
HFONT m_hFont, m_hBoldFont;
CMailFolderHelper(UINT nAddString, UINT nSetItemData, UINT nResetContent );
~CMailFolderHelper();
void InitFonts( HDC hdc );
void DoDrawItem( HWND hWnd, LPDRAWITEMSTRUCT lpDrawItemStruct, BOOL bNoPrettyName = FALSE);
void DoMeasureItem( HWND hWnd, LPMEASUREITEMSTRUCT lpMeasureItemStruct );
virtual void SubPopulate( HWND hWnd, int &index, MSG_FolderInfo *folder );
public:
int Populate( HWND hWnd, MSG_Master *pMaster, MSG_FolderInfo *folderInfo );
int PopulateMailServer( HWND hWnd, MSG_Master *pMaster, BOOL bRoots = TRUE);
int PopulateMail( HWND hWnd, MSG_Master *pMaster, BOOL bRoots = TRUE);
virtual int PopulateNews( HWND hWnd, MSG_Master *pMaster, BOOL bRoots = TRUE );
};
/////////////////////////////////////////////////////////////////////////////
// CMailFolderCombo
class CMailFolderCombo: public CComboBox, public CMailFolderHelper {
protected:
BOOL m_bNoPrettyName;
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
DoDrawItem( m_hWnd, lpDrawItemStruct, m_bNoPrettyName);
}
virtual void MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
{
DoMeasureItem( m_hWnd, lpMeasureItemStruct );
}
public:
CMailFolderCombo(): CMailFolderHelper( CB_ADDSTRING, CB_SETITEMDATA, CB_RESETCONTENT )
{ m_bNoPrettyName = FALSE; }
void NoPrettyName() { m_bNoPrettyName = TRUE; }
int Populate( MSG_Master *pMaster, MSG_FolderInfo *folderInfo )
{
return CMailFolderHelper::Populate( m_hWnd, pMaster, folderInfo );
}
int PopulateMail( MSG_Master *pMaster, BOOL bRoots = TRUE )
{
return CMailFolderHelper::PopulateMail( m_hWnd, pMaster, bRoots );
}
int PopulateMailServer( MSG_Master *pMaster, BOOL bRoots = TRUE )
{
return CMailFolderHelper::PopulateMailServer( m_hWnd, pMaster, bRoots );
}
};
/////////////////////////////////////////////////////////////////////////////
// CMailFolderList
class CMailFolderList: public CListBox, public CMailFolderHelper {
protected:
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct )
{
DoDrawItem( m_hWnd, lpDrawItemStruct );
}
virtual void MeasureItem( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
{
DoMeasureItem( m_hWnd, lpMeasureItemStruct );
}
public:
CMailFolderList(): CMailFolderHelper( LB_ADDSTRING, LB_SETITEMDATA, LB_RESETCONTENT ) {}
virtual int Populate( MSG_Master *pMaster, MSG_FolderInfo *folderInfo )
{
return CMailFolderHelper::Populate( m_hWnd, pMaster, folderInfo );
}
};
class CMailNewsFrame;
class IMailFrame: public IUnknown
{
public:
virtual CMailNewsFrame *GetMailNewsFrame() = 0;
virtual MSG_Pane *GetPane() = 0;
virtual void PaneChanged( MSG_Pane *pane, XP_Bool asynchronous,
MSG_PANE_CHANGED_NOTIFY_CODE, int32 value) = 0;
virtual void AttachmentCount(MSG_Pane *messagepane, void* closure,
int32 numattachments, XP_Bool finishedloading) = 0;
virtual void UserWantsToSeeAttachments(MSG_Pane *messagepane, void *closure) = 0;
};
typedef IMailFrame *LPMAILFRAME;
#endif