gecko-dev/cmd/winfe/mailfrm.cpp

2997 строки
73 KiB
C++
Executable File

/* -*- 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.
*/
//
// Main frame for mail reading window
//
#include "stdafx.h"
#include "intl_csi.h"
#include "netsvw.h"
#include "cxsave.h"
#include "mailfrm.h"
#include "fldrfrm.h"
#include "thrdfrm.h"
#include "msgfrm.h"
#include "msgview.h"
#include "msgcom.h"
#include "mailmisc.h"
#include "template.h"
#include "subnews.h"
#include "mnprefs.h"
#include "mailpriv.h"
#include "prefapi.h"
#include "ssl.h"
#include "xpgetstr.h"
#ifdef DEBUG_WHITEBOX
#include "xp_trace.h"
#include "stdio.h"
#include "qaoutput.h"
#include "qatrace.h"
#endif
extern "C"
{
extern int MK_NNTP_SERVER_NOT_CONFIGURED;
};
extern "C" MSG_Host *DoAddNewsServer(CWnd* pParent, int nFromWhere);
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
int g_iModalDelay = -1;
MSG_Master *WFE_MSGGetMaster();
extern "C" void wfe_AttachmentCount(MSG_Pane *messagepane, void* closure,
int32 numattachments, XP_Bool finishedloading)
{
LPUNKNOWN pUnk = (LPUNKNOWN) MSG_GetFEData( messagepane );
if (pUnk) {
LPMAILFRAME pInterface = NULL;
pUnk->QueryInterface( IID_IMailFrame, (LPVOID *) &pInterface );
if ( pInterface ) {
pInterface->AttachmentCount( messagepane, closure, numattachments, finishedloading );
pInterface->Release();
}
}
}
extern "C" void wfe_UserWantsToSeeAttachments(MSG_Pane *messagepane, void* closure)
{
LPUNKNOWN pUnk = (LPUNKNOWN) MSG_GetFEData( messagepane );
if (pUnk) {
LPMAILFRAME pInterface = NULL;
pUnk->QueryInterface( IID_IMailFrame, (LPVOID *) &pInterface );
if ( pInterface ) {
pInterface->UserWantsToSeeAttachments( messagepane, closure );
pInterface->Release();
}
}
}
MSG_MessagePaneCallbacks MsgPaneCB = {
wfe_AttachmentCount,
wfe_UserWantsToSeeAttachments
};
CMailNewsCX::CMailNewsCX(ContextType ctMyType, CFrameWnd *pFrame )
{
m_pFrame = pFrame;
m_pIChrome = NULL;
m_cxType = ctMyType;
m_lPercent = 0;
m_bAnimated = FALSE;
}
CMailNewsCX::~CMailNewsCX()
{
if (m_pIChrome) {
m_pIChrome->Release();
}
}
void CMailNewsCX::SetChrome( LPUNKNOWN pUnk )
{
LPCHROME pIChrome = NULL;
if ( pUnk ) {
pUnk->QueryInterface( IID_IChrome, (LPVOID *) &pIChrome);
ASSERT(pIChrome);
}
if ( m_pIChrome == pIChrome ) {
return;
}
if ( m_pIChrome ) {
m_pIChrome->Release();
}
m_pIChrome = pIChrome;
if ( m_pIChrome ) {
LPNSSTATUSBAR pIStatusBar = NULL;
m_pIChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetProgress( CASTINT(m_lPercent) );
pIStatusBar->SetStatusText( (LPCTSTR) m_csProgress );
pIStatusBar->Release();
}
if ( m_bAnimated ) {
m_pIChrome->StartAnimation();
} else {
m_pIChrome->StopAnimation();
}
}
}
void CMailNewsCX::SetProgressBarPercent(MWContext *pContext, int32 lPercent ) {
// Ensure the safety of the value.
lPercent = lPercent < 0 ? 0 : ( lPercent > 100 ? 100 : lPercent );
if ( m_lPercent == lPercent ) {
return;
}
m_lPercent = lPercent;
if (m_pIChrome) {
LPNSSTATUSBAR pIStatusBar = NULL;
m_pIChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetProgress( CASTINT(lPercent) );
pIStatusBar->Release();
}
}
}
void CMailNewsCX::Progress(MWContext *pContext, const char *pMessage) {
m_csProgress = pMessage;
if ( m_pIChrome ) {
LPNSSTATUSBAR pIStatusBar = NULL;
m_pIChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetStatusText( pMessage );
pIStatusBar->Release();
}
}
}
int32 CMailNewsCX::QueryProgressPercent() {
return m_lPercent;
}
void CMailNewsCX::SetDocTitle( MWContext *pContext, char *pTitle )
{
}
void CMailNewsCX::StartAnimation()
{
m_bAnimated = TRUE;
if ( m_pIChrome ) {
m_pIChrome->StartAnimation();
}
}
void CMailNewsCX::StopAnimation()
{
m_bAnimated = FALSE;
if ( m_pIChrome ) {
m_pIChrome->StopAnimation();
}
}
void CMailNewsCX::AllConnectionsComplete(MWContext *pContext)
{
// Call the base.
CStubsCX::AllConnectionsComplete(pContext);
// Okay, stop the animation.
StopAnimation();
// Also, we can clear the progress bar now.
m_lPercent = 0;
if ( m_pIChrome ) {
LPNSSTATUSBAR pIStatusBar = NULL;
m_pIChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->SetProgress( 0 );
pIStatusBar->Release();
}
}
if (m_pFrame) {
m_pFrame->SendMessageToDescendants(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, (LPARAM)0);
}
}
void CMailNewsCX::UpdateStopState( MWContext *pContext )
{
if (m_pFrame) {
m_pFrame->SendMessageToDescendants(WM_IDLEUPDATECMDUI, (WPARAM)TRUE, (LPARAM)0);
}
}
CWnd *CMailNewsCX::GetDialogOwner() const {
return m_pFrame;
}
/////////////////////////////////////////////////////////////////////////////
// CMailNewsFrame
#ifndef _AFXDLL
#undef new
#endif
IMPLEMENT_DYNCREATE(CMailNewsFrame, CGenericFrame)
IMPLEMENT_DYNCREATE(CMsgListFrame, CMailNewsFrame)
#ifndef _AFXDLL
#define new DEBUG_NEW
#endif
STDMETHODIMP CMailNewsFrame::QueryInterface(REFIID refiid, LPVOID * ppv)
{
*ppv = NULL;
if (IsEqualIID(refiid,IID_IUnknown))
*ppv = (LPUNKNOWN) this;
else if (IsEqualIID(refiid,IID_IMailFrame))
*ppv = (LPMAILFRAME) this;
if (*ppv != NULL) {
AddRef();
return NOERROR;
}
return ResultFromScode(E_NOINTERFACE);
}
STDMETHODIMP_(ULONG) CMailNewsFrame::AddRef(void)
{
return ++m_ulRefCount;
}
STDMETHODIMP_(ULONG) CMailNewsFrame::Release(void)
{
ULONG ulRef;
ulRef = --m_ulRefCount;
if (m_ulRefCount == 0)
delete this;
return ulRef;
}
// IMailFrame interface
CMailNewsFrame *CMailNewsFrame::GetMailNewsFrame()
{
return (CMailNewsFrame *) this;
}
MSG_Pane *CMailNewsFrame::GetPane()
{
return m_pPane;
}
void CMailNewsFrame::PaneChanged(MSG_Pane *pane, XP_Bool asynchronous,
MSG_PANE_CHANGED_NOTIFY_CODE notify, int32 value)
{
}
void CMailNewsFrame::AttachmentCount(MSG_Pane *messagepane, void* closure,
int32 numattachments, XP_Bool finishedloading)
{
if (m_pMessagePane != NULL)
{
m_nAttachmentCount = numattachments;
// OK, so 64 is arbitrary, but a bunch of menu ranges need to
// be changed if it changes.
if (m_nAttachmentCount > 64)
m_nAttachmentCount = 64;
if (m_pAttachmentData)
MSG_FreeAttachmentList(m_pMessagePane, m_pAttachmentData);
m_pAttachmentData = NULL;
MSG_GetViewedAttachments(m_pMessagePane, &m_pAttachmentData, NULL);
if (m_pMessageView) {
if (numattachments == 0)
m_pMessageView->ShowAttachments(FALSE);
m_pMessageView->SetAttachments( numattachments, m_pAttachmentData );
}
}
}
void CMailNewsFrame::UserWantsToSeeAttachments(MSG_Pane *messagepane, void* closure)
{
if (m_pMessagePane != NULL)
{
if (m_pMessageView)
m_pMessageView->ShowAttachments(!m_pMessageView->AttachmentsVisible());
}
}
CMailNewsFrame::CMailNewsFrame()
{
m_bNews = FALSE;
m_bCategory = FALSE;
// Folder Frame is the only one that's different
m_iMessageMenuPos = 4;
m_iMoveMenuPos = 6;
m_iCopyMenuPos = 7;
m_iFileMenuPos = 0;
m_iAttachMenuPos = 3;
m_pPane = NULL;
m_pMessagePane = NULL;
m_pMaster = NULL;
m_ulRefCount = 1; // Don't auto delete
m_pOutliner = NULL;
m_pInfoBar = NULL;
m_hAccel = NULL;
m_pAttachmentData = NULL;
m_nAttachmentCount = 0;
m_pMessageView = NULL;
}
//
// The menu gets cleaned up on window destruction but we need
// to delete our accelerator table ourselves
//
CMailNewsFrame::~CMailNewsFrame()
{
if(m_hAccelTable != NULL) {
#ifdef _WIN32
VERIFY(::DestroyAcceleratorTable( m_hAccelTable ));
#else
::FreeResource((HGLOBAL)m_hAccelTable);
#endif
m_hAccelTable = NULL;
}
delete m_pInfoBar;
if ( m_hAccel )
#ifdef _WIN32
::DestroyAcceleratorTable( m_hAccel );
#else
::FreeResource( (HGLOBAL)m_hAccel );
#endif
}
C3PaneMailFrame *CMailNewsFrame::GetLastThreadFrame(CFrameWnd *pExclude)
{
CFrameGlue *pGlue = NULL;
// Loop through all active frames.
POSITION rIndex = m_cplActiveFrameStack.GetHeadPosition();
while( rIndex != NULL ) {
pGlue = (CFrameGlue *) m_cplActiveFrameStack.GetNext( rIndex );
if( pGlue->GetFrameWnd() ) {
if ( pGlue->GetFrameWnd()->IsKindOf(RUNTIME_CLASS(C3PaneMailFrame)) ) {
// Win16 somehow gets the newest frame on the stack before
// I want it to, so I need to force it to be skipped
if (pGlue->GetFrameWnd() != pExclude)
return (C3PaneMailFrame *) pGlue->GetFrameWnd();
}
}
}
return NULL;
}
CMessageFrame *CMailNewsFrame::GetLastMessageFrame(CFrameWnd *pExclude)
{
CFrameGlue *pGlue = NULL;
// Loop through all active frames.
POSITION rIndex = m_cplActiveFrameStack.GetHeadPosition();
while( rIndex != NULL ) {
pGlue = (CFrameGlue *) m_cplActiveFrameStack.GetNext( rIndex );
if( pGlue->GetFrameWnd() ) {
if ( pGlue->GetFrameWnd()->IsKindOf(RUNTIME_CLASS(CMessageFrame)) ) {
// Win16 somehow gets the newest frame on the stack before
// I want it to, so I need to force it to be skipped
if (pGlue->GetFrameWnd() != pExclude)
return (CMessageFrame *) pGlue->GetFrameWnd();
}
}
}
return NULL;
}
extern int iLowerColors;
extern int iLowerSystemColors;
BOOL CMailNewsFrame::LoadAccelerators( UINT nID )
{
return LoadAccelerators(MAKEINTRESOURCE(nID));
}
BOOL CMailNewsFrame::LoadAccelerators( LPCSTR lpszResource )
{
BOOL bSuccess = FALSE;
VERIFY( m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(), lpszResource ));
if ( m_hAccel )
bSuccess = TRUE;
return bSuccess;
}
void CMailNewsFrame::ActivateFrame( int nCmdShow )
{
nCmdShow = (nCmdShow == -1) ? (IsIconic() ? SW_RESTORE : SW_SHOW) : nCmdShow;
#ifdef _WIN32
SetForegroundWindow();
#else
SetActiveWindow();
#endif
CGenericFrame::ActivateFrame( nCmdShow );
}
BOOL CMailNewsFrame::PreCreateWindow( CREATESTRUCT& cs )
{
BOOL res = CGenericFrame::PreCreateWindow(cs);
if (!sysInfo.m_bWin4) {
if (m_bPreCreated) {
cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS|CS_HREDRAW|CS_VREDRAW,
::LoadCursor(NULL, IDC_ARROW),
(HBRUSH)(COLOR_WINDOW+1),
NULL);
cs.hInstance = AfxGetInstanceHandle();
}
}
return res;
}
BOOL CMailNewsFrame::PreTranslateMessage( MSG *pMsg )
{
if ( pMsg->message == WM_KEYDOWN) {
CWinCX* pContext = GetActiveWinContext();
// Determine if keystroke is destined for a contained window
HWND hwnd = pMsg->hwnd;
LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
while ((lStyle & WS_CHILD) && (hwnd = ::GetParent(hwnd))) {
lStyle = GetWindowLong(hwnd, GWL_STYLE);
}
if (hwnd == m_hWnd && pContext) {
HWND hwndFocus = ::GetFocus();
HWND hwndView = pContext->GetPane();
if ( !::IsChild( hwndView, hwndFocus ) ) {
// Give accelerators first shot
if ( TranslateAccelerator( m_hWnd, m_hAccel, pMsg ) ) {
return TRUE;
}
}
}
}
return CGenericFrame::PreTranslateMessage( pMsg );
}
void CMailNewsFrame::GetMessageString( UINT nID, CString& rMessage ) const
{
MSG_FolderInfo *folderInfo = GetCurFolder();
MSG_FolderLine folderLine;
folderLine.flags = 0;
if ( folderInfo ) {
MSG_GetFolderLineById( WFE_MSGGetMaster(), folderInfo, &folderLine );
}
CString csFull = "";
switch (nID) {
case ID_EDIT_DELETEMESSAGE:
if (m_bNews)
csFull.LoadString( IDS_STATUS_CANCELMESSAGE );
break;
case ID_EDIT_DELETEFOLDER:
case ID_POPUP_DELETEFOLDER:
if ( folderLine.flags & MSG_FOLDER_FLAG_MAIL ) {
csFull.LoadString( ID_EDIT_DELETEFOLDER );
} else if ( folderLine.flags & MSG_FOLDER_FLAG_NEWS_HOST ) {
rMessage.LoadString( IDS_STATUS_DELETENEWSHOST );
} else if ( folderLine.flags & MSG_FOLDER_FLAG_NEWSGROUP ) {
rMessage.LoadString( IDS_STATUS_DELETENEWSGROUP );
} else {
rMessage.LoadString( IDS_STATUS_DELETESELECTION );
}
break;
case ID_FILE_GETNEXT:
{
int32 iDownloadMax = 0;
PREF_GetIntPref("news.max_articles", &iDownloadMax);
csFull.Format(szLoadString(ID_FILE_GETNEXT), (int) iDownloadMax );
}
break;
case ID_FILE_NEWFOLDER:
if (m_bNews) {
if (m_bCategory)
csFull.LoadString(ID_FILE_NEWCATEGORY);
else
csFull.LoadString(ID_FILE_NEWNEWSGROUP);
} else {
csFull.LoadString(ID_FILE_NEWFOLDER);
}
break;
default:
break;
}
if (nID >= FIRST_MOVE_MENU_ID && nID <= LAST_MOVE_MENU_ID)
csFull.LoadString(IDS_STATUS_MOVEMESSAGE);
else if (nID >= FIRST_COPY_MENU_ID && nID <= LAST_COPY_MENU_ID)
csFull.LoadString(IDS_STATUS_COPYMESSAGE);
if (!csFull.IsEmpty()) {
AfxExtractSubString( rMessage, csFull, 0 );
} else {
CGenericFrame::GetMessageString( nID, rMessage );
}
}
BEGIN_MESSAGE_MAP(CMailNewsFrame, CGenericFrame)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_CLOSE()
ON_WM_SETFOCUS()
ON_WM_DESTROY()
ON_WM_INITMENUPOPUP()
ON_MESSAGE(NSBUTTONMENUOPEN, OnButtonMenuOpen)
// File Menu Commands
ON_COMMAND(ID_FILE_NEWMESSAGE, OnNew)
ON_UPDATE_COMMAND_UI(ID_FILE_NEWMESSAGE, OnUpdateNew)
ON_COMMAND(ID_FILE_NEWFOLDER, OnNewFolder)
ON_UPDATE_COMMAND_UI(ID_FILE_NEWFOLDER, OnUpdateNewFolder)
ON_COMMAND(ID_FILE_NEWNEWSGROUP, OnNewNewsgroup)
ON_UPDATE_COMMAND_UI(ID_FILE_NEWNEWSGROUP, OnUpdateNewNewsgroup)
ON_COMMAND(ID_FILE_NEWNEWSHOST, OnNewNewshost)
ON_UPDATE_COMMAND_UI(ID_FILE_NEWNEWSHOST, OnUpdateNewNewshost)
ON_COMMAND(ID_FILE_NEWCATEGORY, OnNewCategory)
ON_UPDATE_COMMAND_UI(ID_FILE_NEWCATEGORY, OnUpdateNewCategory)
ON_COMMAND(ID_FILE_SAVEMESSAGES, OnSave)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVEMESSAGES, OnUpdateSave)
ON_COMMAND(ID_FILE_EDITMESSAGE, OnEditMessage)
ON_UPDATE_COMMAND_UI(ID_FILE_EDITMESSAGE, OnUpdateEditMessage)
ON_COMMAND(ID_FILE_ADDNEWSGROUP, OnAddNewsGroup)
ON_UPDATE_COMMAND_UI(ID_FILE_ADDNEWSGROUP, OnUpdateAddNewsGroup)
ON_COMMAND(ID_FILE_SUBSCRIBE, OnSubscribe)
ON_UPDATE_COMMAND_UI(ID_FILE_SUBSCRIBE, OnUpdateSubscribe)
ON_COMMAND(ID_FILE_UNSUBSCRIBE, OnUnsubscribe)
ON_UPDATE_COMMAND_UI(ID_FILE_UNSUBSCRIBE, OnUpdateUnsubscribe)
#ifdef ON_COMMAND_RANGE
ON_COMMAND_RANGE( FIRST_ATTACH_MENU_ID, LAST_ATTACH_MENU_ID, OnOpenAttach )
ON_UPDATE_COMMAND_UI_RANGE( FIRST_ATTACH_MENU_ID, LAST_ATTACH_MENU_ID, OnUpdateOpenAttach )
ON_COMMAND_RANGE( FIRST_SAVEATTACH_MENU_ID, LAST_SAVEATTACH_MENU_ID, OnSaveAttach )
ON_UPDATE_COMMAND_UI_RANGE( FIRST_SAVEATTACH_MENU_ID, LAST_SAVEATTACH_MENU_ID, OnUpdateSaveAttach )
ON_COMMAND_RANGE( FIRST_ATTACHPROP_MENU_ID, LAST_ATTACHPROP_MENU_ID, OnAttachProperties )
ON_UPDATE_COMMAND_UI_RANGE( FIRST_ATTACHPROP_MENU_ID, LAST_ATTACHPROP_MENU_ID, OnUpdateAttachProperties )
#endif
// Edit Menu Commands
ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo)
ON_COMMAND(ID_EDIT_DELETEFOLDER, OnDeleteFolder)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETEFOLDER, OnUpdateDeleteFolder)
ON_COMMAND(ID_POPUP_DELETEFOLDER, OnDeleteFolder)
ON_UPDATE_COMMAND_UI(ID_POPUP_DELETEFOLDER, OnUpdateDeleteFolder)
ON_COMMAND(ID_EDIT_DELETEMESSAGE, OnDeleteMessage)
ON_COMMAND(ID_EDIT_REALLYDELETEMESSAGE, OnReallyDeleteMessage)
ON_UPDATE_COMMAND_UI(ID_EDIT_DELETEMESSAGE, OnUpdateDeleteMessage)
ON_COMMAND(ID_EDIT_SELECTALLMESSAGES, OnSelectAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_SELECTALLMESSAGES, OnUpdateSelectAll)
ON_COMMAND(ID_EDIT_SELECTALL, OnSelectAll)
ON_UPDATE_COMMAND_UI(ID_EDIT_SELECTALL, OnUpdateSelectAll)
ON_COMMAND(ID_EDIT_SEARCH, OnSearch)
ON_COMMAND(ID_EDIT_FILTER, OnFilter)
ON_COMMAND(ID_EDIT_MANAGEMAILACCOUNT, OnSetupWizard)
ON_UPDATE_COMMAND_UI(ID_EDIT_MANAGEMAILACCOUNT, OnUpdateSetupWizard)
ON_COMMAND(ID_EDIT_SERVER, OnServerStuff)
ON_UPDATE_COMMAND_UI(ID_EDIT_SERVER, OnUpdateServerStuff)
// View Menu Items
ON_COMMAND(ID_MAIL_SORTAGAIN, OnSortAgain)
ON_UPDATE_COMMAND_UI(ID_MAIL_SORTAGAIN, OnUpdateSortAgain)
ON_COMMAND(ID_SORT_ASCENDING, OnAscending)
ON_UPDATE_COMMAND_UI(ID_SORT_ASCENDING, OnUpdateAscending)
ON_COMMAND(ID_SORT_DESCENDING, OnDescending)
ON_UPDATE_COMMAND_UI(ID_SORT_DESCENDING, OnUpdateDescending)
ON_COMMAND(ID_SORT_BYDATE, OnSortDate)
ON_UPDATE_COMMAND_UI(ID_SORT_BYDATE, OnUpdateSortDate)
ON_COMMAND(ID_SORT_BYSUBJECT, OnSortSubject)
ON_UPDATE_COMMAND_UI(ID_SORT_BYSUBJECT, OnUpdateSortSubject)
ON_COMMAND(ID_SORT_BYSENDER, OnSortSender)
ON_UPDATE_COMMAND_UI(ID_SORT_BYSENDER, OnUpdateSortSender)
ON_COMMAND(ID_SORT_BYMESSAGENUMBER, OnSortNumber)
ON_UPDATE_COMMAND_UI(ID_SORT_BYMESSAGENUMBER, OnUpdateSortNumber)
ON_COMMAND(ID_SORT_BYTHREAD, OnThread)
ON_UPDATE_COMMAND_UI(ID_SORT_BYTHREAD, OnUpdateThread)
ON_COMMAND(ID_SORT_BYPRIORITY, OnSortPriority)
ON_UPDATE_COMMAND_UI(ID_SORT_BYPRIORITY, OnUpdateSortPriority)
ON_COMMAND(ID_SORT_BYSTATUS, OnSortStatus)
ON_UPDATE_COMMAND_UI(ID_SORT_BYSTATUS, OnUpdateSortStatus)
ON_COMMAND(ID_SORT_BYSIZE, OnSortSize)
ON_UPDATE_COMMAND_UI(ID_SORT_BYSIZE, OnUpdateSortSize)
ON_COMMAND(ID_SORT_BYFLAG, OnSortFlag)
ON_UPDATE_COMMAND_UI(ID_SORT_BYFLAG, OnUpdateSortFlag)
ON_COMMAND(ID_SORT_BYUNREAD, OnSortUnread)
ON_UPDATE_COMMAND_UI(ID_SORT_BYUNREAD, OnUpdateSortUnread)
ON_COMMAND(ID_VIEW_ALLTHREADS, OnViewAll)
ON_UPDATE_COMMAND_UI(ID_VIEW_ALLTHREADS, OnUpdateViewAll)
ON_COMMAND(ID_VIEW_KILLEDTHREADS, OnViewKilled)
ON_UPDATE_COMMAND_UI(ID_VIEW_KILLEDTHREADS, OnUpdateViewKilled)
ON_COMMAND(ID_VIEW_WATCHEDTHREADS, OnViewWatched)
ON_UPDATE_COMMAND_UI(ID_VIEW_WATCHEDTHREADS, OnUpdateViewWatched)
ON_COMMAND(ID_VIEW_NEWTHREADS, OnViewNew)
ON_UPDATE_COMMAND_UI(ID_VIEW_NEWTHREADS, OnUpdateViewNew)
ON_COMMAND(ID_VIEW_NEWONLY, OnViewNewOnly)
ON_UPDATE_COMMAND_UI(ID_VIEW_NEWONLY, OnUpdateViewNewOnly)
ON_COMMAND(ID_VIEW_HEADERS_MICRO, OnHeadersMicro)
ON_UPDATE_COMMAND_UI(ID_VIEW_HEADERS_MICRO, OnUpdateHeadersMicro)
ON_COMMAND(ID_VIEW_HEADERS_SHORT, OnHeadersShort)
ON_UPDATE_COMMAND_UI(ID_VIEW_HEADERS_SHORT, OnUpdateHeadersShort)
ON_COMMAND(ID_VIEW_HEADERS_ALL, OnHeadersAll)
ON_UPDATE_COMMAND_UI(ID_VIEW_HEADERS_ALL, OnUpdateHeadersAll)
ON_COMMAND(ID_VIEW_ATTACHINLINE,OnViewInline)
ON_UPDATE_COMMAND_UI(ID_VIEW_ATTACHINLINE,OnUpdateViewInline)
ON_COMMAND(ID_VIEW_ATTACHLINKS,OnViewAsLinks)
ON_UPDATE_COMMAND_UI(ID_VIEW_ATTACHLINKS,OnUpdateViewAsLinks)
// Navigation Commands
ON_COMMAND(ID_MESSAGE_NEXT, OnNext)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_NEXT, OnUpdateNext)
ON_COMMAND(ID_MESSAGE_NEXTNEWSGROUP, OnNextFolder)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_NEXTNEWSGROUP, OnUpdateNextFolder)
ON_COMMAND(ID_MESSAGE_NEXTUNREAD, OnNextUnread)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_NEXTUNREAD, OnUpdateNextUnread)
ON_COMMAND(ID_MESSAGE_PREVIOUS, OnPrevious)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_PREVIOUS, OnUpdatePrevious)
ON_COMMAND(ID_MESSAGE_PREVIOUSUNREAD, OnPreviousUnread)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_PREVIOUSUNREAD, OnUpdatePreviousUnread)
ON_COMMAND(ID_MESSAGE_NEXTUNREADTHREAD, OnNextUnreadThread)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_NEXTUNREADTHREAD, OnUpdateNextUnreadThread)
ON_COMMAND(ID_MESSAGE_NEXTUNREADNEWSGROUP, OnNextUnreadFolder)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_NEXTUNREADNEWSGROUP, OnUpdateNextUnreadFolder)
ON_COMMAND(ID_MESSAGE_PREVIOUSFLAGGED, OnPreviousFlagged)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_PREVIOUSFLAGGED, OnUpdatePreviousFlagged)
ON_COMMAND(ID_MESSAGE_NEXTFLAGGED, OnNextFlagged)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_NEXTFLAGGED, OnUpdateNextFlagged)
ON_COMMAND(ID_MESSAGE_FIRSTFLAGGED, OnFirstFlagged)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_FIRSTFLAGGED, OnUpdateFirstFlagged)
/* hack for message backtracking */
ON_COMMAND(ID_NAVIGATE_MSG_BACK, OnGoBack)
ON_UPDATE_COMMAND_UI(ID_NAVIGATE_MSG_BACK, OnUpdateGoBack)
ON_COMMAND(ID_NAVIGATE_MSG_FORWARD, OnGoForward)
ON_UPDATE_COMMAND_UI(ID_NAVIGATE_MSG_FORWARD, OnUpdateGoForward)
// Message menu items
ON_COMMAND(ID_FILE_GETNEWMAIL, OnGetMail)
ON_UPDATE_COMMAND_UI(ID_FILE_GETNEWMAIL, OnUpdateGetMail)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_REPLYBUTTON, OnUpdateReply)
ON_COMMAND(ID_FILE_GETMOREMESSAGES, OnGetMail)
ON_UPDATE_COMMAND_UI(ID_FILE_GETMOREMESSAGES, OnUpdateGetMail)
ON_COMMAND(ID_FILE_GETNEXT, OnGetNext)
ON_UPDATE_COMMAND_UI(ID_FILE_GETNEXT, OnUpdateGetNext)
ON_COMMAND(ID_FILE_DELIVERMAILNOW,OnDeliverNow)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_SENDUNSENT,OnUpdateDeliverNow)
ON_COMMAND(ID_MESSAGE_SENDUNSENT, OnDeliverNow)
ON_UPDATE_COMMAND_UI(ID_FILE_DELIVERMAILNOW,OnUpdateDeliverNow)
ON_COMMAND(ID_NEWS_POSTNEW, OnPostNew)
ON_UPDATE_COMMAND_UI(ID_NEWS_POSTNEW, OnUpdatePostNew)
ON_COMMAND(ID_MESSAGE_REPLY, OnReply)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_REPLY, OnUpdateReply)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKBUTTON, OnUpdateMarkAllRead )
ON_COMMAND(ID_MESSAGE_REPLYALL, OnReplyAll)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_REPLYALL, OnUpdateReplyAll)
ON_COMMAND(ID_MESSAGE_FORWARD, OnForward)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_FORWARD, OnUpdateForward)
ON_COMMAND(ID_MESSAGE_FORWARDQUOTED, OnForwardQuoted)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_FORWARDQUOTED, OnUpdateForwardQuoted)
ON_COMMAND(ID_MESSAGE_POSTREPLY, OnPostReply)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_POSTREPLY, OnUpdatePostReply)
ON_COMMAND(ID_MESSAGE_POSTANDREPLY, OnPostAndMailReply)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_POSTANDREPLY, OnUpdatePostAndMailReply)
ON_COMMAND(ID_MESSAGE_KILL, OnKill )
ON_UPDATE_COMMAND_UI(ID_MESSAGE_KILL, OnUpdateKill )
ON_COMMAND(ID_MESSAGE_RETRIEVESELECTED, OnRetrieveSelected)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_RETRIEVESELECTED, OnUpdateRetrieveSelected)
ON_COMMAND(ID_MESSAGE_WATCH, OnWatch )
ON_UPDATE_COMMAND_UI(ID_MESSAGE_WATCH, OnUpdateWatch )
ON_COMMAND(ID_MESSAGE_MARKASREAD, OnMarkMessagesRead)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKASREAD, OnUpdateMarkMessagesRead)
ON_COMMAND(ID_MESSAGE_MARKASUNREAD, OnMarkMessagesUnread)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKASUNREAD, OnUpdateMarkMessagesUnread)
ON_COMMAND(ID_MESSAGE_MARKTHREADREAD, OnMarkThreadRead )
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKTHREADREAD, OnUpdateMarkThreadRead )
ON_COMMAND(ID_MESSAGE_MARKALLREAD, OnMarkAllRead )
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKALLREAD, OnUpdateMarkAllRead )
ON_COMMAND(ID_MESSAGE_MARKALLREAD, OnMarkAllRead )
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKALLREAD, OnUpdateMarkAllRead )
ON_COMMAND(ID_MESSAGE_CATCHUP, OnCatchup)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_CATCHUP, OnUpdateCatchup)
ON_COMMAND(ID_MESSAGE_MARKASLATER, OnMarkMessagesLater)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_MARKASLATER, OnUpdateMarkMessagesLater)
ON_COMMAND(ID_MESSAGE_RETRIEVEOFFLINE, OnRetrieveOffline)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_RETRIEVEOFFLINE, OnUpdateRetrieveOffline)
ON_COMMAND(ID_MESSAGE_MARK, OnMarkMessages )
ON_UPDATE_COMMAND_UI( ID_MESSAGE_MARK, OnUpdateMarkMessages )
ON_COMMAND(ID_MESSAGE_UNMARK, OnUnmarkMessages )
ON_UPDATE_COMMAND_UI( ID_MESSAGE_UNMARK, OnUpdateUnmarkMessages )
ON_COMMAND(ID_EDIT_CANCELMESSAGE, OnCancelMessage)
ON_UPDATE_COMMAND_UI(ID_EDIT_CANCELMESSAGE, OnUpdateCancelMessage)
ON_COMMAND(ID_NAVIGATE_INTERRUPT, OnInterrupt)
ON_UPDATE_COMMAND_UI(ID_NAVIGATE_INTERRUPT, OnUpdateInterrupt)
ON_COMMAND(ID_MAIL_WRAPLONGLINES,OnWrapLongLines)
ON_UPDATE_COMMAND_UI(ID_MAIL_WRAPLONGLINES,OnUpdateWrapLongLines)
ON_COMMAND(ID_VIEW_ROT13,OnViewRot13)
ON_UPDATE_COMMAND_UI(ID_VIEW_ROT13,OnUpdateViewRot13)
// Organize Menu
ON_COMMAND(ID_FILE_COMPRESSTHISFOLDER, OnCompressFolder)
ON_UPDATE_COMMAND_UI(ID_FILE_COMPRESSTHISFOLDER, OnUpdateCompressFolder)
ON_COMMAND(ID_FOLDER_RENAME, OnRenameFolder)
ON_UPDATE_COMMAND_UI(ID_FOLDER_RENAME, OnUpdateRenameFolder)
ON_COMMAND(ID_FILE_COMPRESSALLFOLDERS, OnCompressAll)
ON_UPDATE_COMMAND_UI(ID_FILE_COMPRESSALLFOLDERS, OnUpdateCompressAll)
ON_COMMAND(ID_FILE_EMPTYTRASHFOLDER, OnEmptyTrash)
ON_UPDATE_COMMAND_UI(ID_FILE_EMPTYTRASHFOLDER, OnUpdateEmptyTrash)
ON_COMMAND(ID_MESSAGE_ADDSENDER, OnAddToAddressBook)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_ADDSENDER, OnUpdateAddToAddressBook)
ON_COMMAND(ID_MESSAGE_ADDALL, OnAddAllToAddressBook)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_ADDALL, OnUpdateAddAllToAddressBook)
// Non-MSG Commands
ON_COMMAND(ID_OPTIONS_TIPS, OnTips)
ON_COMMAND(ID_MESSAGE_FILE, OnQuickFile)
ON_UPDATE_COMMAND_UI(ID_MESSAGE_FILE, OnUpdateQuickFile)
ON_COMMAND(ID_PRIORITY_LOWEST, OnPriorityLowest)
ON_UPDATE_COMMAND_UI(ID_PRIORITY_LOWEST, OnUpdatePriority)
ON_COMMAND(ID_PRIORITY_LOW, OnPriorityLow)
ON_UPDATE_COMMAND_UI(ID_PRIORITY_LOW, OnUpdatePriority)
ON_COMMAND(ID_PRIORITY_NORMAL, OnPriorityNormal)
ON_UPDATE_COMMAND_UI(ID_PRIORITY_NORMAL, OnUpdatePriority)
ON_COMMAND(ID_PRIORITY_HIGH, OnPriorityHigh)
ON_UPDATE_COMMAND_UI(ID_PRIORITY_HIGH, OnUpdatePriority)
ON_COMMAND(ID_PRIORITY_HIGHEST, OnPriorityHighest)
ON_UPDATE_COMMAND_UI(ID_PRIORITY_HIGHEST, OnUpdatePriority)
ON_UPDATE_COMMAND_UI(ID_SECURITY, OnUpdateSecurity)
ON_UPDATE_COMMAND_UI(IDS_SECURITY_STATUS, OnUpdateSecureStatus)
ON_UPDATE_COMMAND_UI(IDS_SIGNED_STATUS, OnUpdateSecureStatus)
END_MESSAGE_MAP()
BOOL CMailNewsFrame::OnCommand( WPARAM wParam, LPARAM lParam )
{
UINT nID = wParam;
if (nID == ID_FILE_SUBSCRIBE)
{
MSG_Host* pThisHost = (MSG_Host*)lParam;
DoSubscribe(pThisHost);
return TRUE;
}
#ifndef ON_COMMAND_RANGE
if ( nID >= FIRST_ATTACH_MENU_ID && nID <= LAST_ATTACH_MENU_ID ) {
OnOpenAttach( nID );
return TRUE;
} else if (nID >= FIRST_SAVEATTACH_MENU_ID && nID <= LAST_SAVEATTACH_MENU_ID) {
OnSaveAttach( nID );
return TRUE;
} else if (nID >= FIRST_ATTACHPROP_MENU_ID && nID <= LAST_ATTACHPROP_MENU_ID) {
OnAttachProperties( nID );
return TRUE;
}
#endif
return CGenericFrame::OnCommand( wParam, lParam );
}
#ifndef ON_COMMAND_RANGE
BOOL CMailNewsFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
if (nCode == CN_UPDATE_COMMAND_UI) {
CCmdUI* pCmdUI = (CCmdUI*)pExtra;
if ( nID >= FIRST_ATTACH_MENU_ID && nID <= LAST_ATTACH_MENU_ID ) {
OnUpdateOpenAttach( pCmdUI );
return TRUE;
} else if (nID >= FIRST_SAVEATTACH_MENU_ID && nID <= LAST_SAVEATTACH_MENU_ID) {
OnUpdateSaveAttach( pCmdUI );
return TRUE;
} else if (nID >= FIRST_ATTACHPROP_MENU_ID && nID <= LAST_ATTACHPROP_MENU_ID) {
OnUpdateAttachProperties( pCmdUI );
return TRUE;
}
}
return CGenericFrame::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}
#endif
static int iMailFrameCount = 0;
int CMailNewsFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
int res = CGenericFrame::OnCreate(lpCreateStruct);
iMailFrameCount++;
return res;
}
static void _ShutDownFrameCallBack(HWND hwnd, MSG_Pane *pane, void * closure)
{
if (::IsWindow(hwnd)) {
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
}
if (pane)
MSG_CleanupFolders(pane);
}
void CMailNewsFrame::OnPaint()
{
// To switch icons on < version 4, we have to override paint
// when the window is iconic
if (!sysInfo.m_bWin4 && IsIconic()) {
CPaintDC dc(this);
UINT nIDIcon = m_bNews ? IDR_NEWSTHREAD : IDR_MAILTHREAD;
if (IsKindOf(RUNTIME_CLASS(CFolderFrame)))
nIDIcon = IDR_MAILFRAME;
HICON hLargeIcon = theApp.LoadIcon(nIDIcon);
dc.DrawIcon(0, 0, hLargeIcon);
} else {
CGenericFrame::OnPaint();
}
}
HCURSOR CMailNewsFrame::OnQueryDragIcon()
{
UINT nIDIcon = m_bNews ? IDR_NEWSTHREAD : IDR_MAILTHREAD;
if (IsKindOf(RUNTIME_CLASS(CFolderFrame)))
nIDIcon = IDR_MAILFRAME;
return (HCURSOR) theApp.LoadIcon(nIDIcon);
}
void CMailNewsFrame::OnClose()
{
XP_Bool bSelectable = FALSE;
XP_Bool bPlural = FALSE;
MSG_COMMAND_CHECK_STATE sState = MSG_Unchecked;
if (1 == iMailFrameCount) // this seems to be null when you close a message window dmb
{
ASSERT(m_pPane);
MSG_CommandStatus(m_pPane, MSG_DeliverQueuedMessages, 0, NULL,
&bSelectable, &sState, NULL, &bPlural);
if (bSelectable && !NET_IsOffline()) {
CString strTitle;
VERIFY(strTitle.LoadString(IDS_NETSCAPE_MAIL_TITLE));
if (MessageBox(szLoadString(IDS_UNSENT_MESSAGES), strTitle, MB_YESNO) == IDYES) {
MSG_Command(m_pPane, MSG_DeliverQueuedMessages, 0, NULL );
return;
}
}
if (MSG_CleanupNeeded(m_pMaster))
new CProgressDialog(NULL, m_pPane,_ShutDownFrameCallBack,
NULL,szLoadString(IDS_COMPRESSINGFOLDERS));
}
CGenericFrame::OnClose();
}
void CMailNewsFrame::OnDestroy()
{
iMailFrameCount--;
MSG_DestroyPane(m_pPane);
m_pPane = NULL;
CGenericFrame::OnDestroy();
}
void CMailNewsFrame::OnInitMenuPopup( CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu )
{
AfxLockTempMaps();
CGenericFrame::OnInitMenuPopup( pPopupMenu, nIndex, bSysMenu );
HMENU hmenu = ::GetMenu(m_hWnd);
if ( m_iMessageMenuPos >= 0 &&
pPopupMenu->m_hMenu == GetSubMenu(hmenu, m_iMessageMenuPos )) {
UpdateFileMenus();
} else if (m_iFileMenuPos >= 0 &&
pPopupMenu->m_hMenu == GetSubMenu(hmenu, m_iFileMenuPos )) {
UpdateAttachmentMenus();
}
AfxUnlockTempMaps();
}
MSG_FolderInfo *CMailNewsFrame::FolderInfoFromMenuID( MSG_FolderInfo *mailRoot,
UINT &nBase, UINT nID )
{
int i, iCount;
MSG_FolderInfo **folderInfos;
MSG_FolderInfo *res = NULL;
MSG_FolderLine folderLine;
if (mailRoot == NULL ) {
// Loop through top level folderInfos, looking for mail trees.
iCount = MSG_GetFolderChildren(m_pMaster, NULL, NULL, NULL);
folderInfos = new MSG_FolderInfo*[iCount];
if (folderInfos) {
MSG_GetFolderChildren(m_pMaster, NULL, folderInfos, iCount);
for (i = 0; i < iCount && !res; i++) {
if (MSG_GetFolderLineById(m_pMaster, folderInfos[i], &folderLine)) {
if (folderLine.flags & MSG_FOLDER_FLAG_MAIL) {
res = FolderInfoFromMenuID( folderInfos[i], nBase, nID);
}
}
}
delete [] folderInfos;
}
return res;
}
MSG_GetFolderLineById( m_pMaster, mailRoot, &folderLine );
if (folderLine.level > 1) { // We've a subfolder
if ( nID == nBase ) {
return mailRoot;
}
nBase++;
}
iCount = MSG_GetFolderChildren( m_pMaster, mailRoot, NULL, NULL );
folderInfos = new MSG_FolderInfo*[iCount];
ASSERT( folderInfos );
if (folderInfos) {
MSG_GetFolderChildren( m_pMaster, mailRoot, folderInfos, iCount );
for ( i = 0; i < iCount && !res; i++ ) {
if ( MSG_GetFolderLineById( m_pMaster, folderInfos[ i ], &folderLine ) ) {
if ( folderLine.numChildren > 0 ) {
res = FolderInfoFromMenuID( folderInfos[ i ], nBase, nID );
} else {
if ( nID == nBase ) {
res = folderInfos[ i ];
} else {
nBase++;
}
}
}
}
delete [] folderInfos;
}
return res;
}
MSG_FolderInfo *CMailNewsFrame::FolderInfoFromMenuID( UINT nID )
{
UINT nBase = 0;
if ( nID >= FIRST_MOVE_MENU_ID && nID <= LAST_MOVE_MENU_ID ) {
nBase = FIRST_MOVE_MENU_ID;
} else if ( nID >= FIRST_COPY_MENU_ID && nID <= LAST_COPY_MENU_ID ) {
nBase = FIRST_COPY_MENU_ID;
} else {
ASSERT(0);
return NULL;
}
return FolderInfoFromMenuID( NULL, nBase, nID );
}
// Update the menu list for the copy and move submenus
//
void CMailNewsFrame::UpdateMenu( MSG_FolderInfo *mailRoot,
HMENU hMenu, UINT &nID, int nStart)
{
// *** If you change the way this menu is built, you also need to
// change CMailNewsFrame::FolderInfoFromMenuID and make it the same
// as CMailQFButton::BuildMenu ***
MSG_Master *pMaster = WFE_MSGGetMaster();
int i, j;
MSG_FolderInfo **folderInfos;
int32 iCount;
MSG_FolderLine folderLine;
char buffer[_MAX_PATH];
j = nStart;
if (mailRoot == NULL) {
// Get rid of old top level menu (deletes submenus, too)
int iMenuCount = ::GetMenuItemCount( hMenu );
for( i = 0; i < iMenuCount; i++)
::DeleteMenu( hMenu, 0, MF_BYPOSITION );
// Loop through top level folderInfos, looking for mail trees.
iCount = MSG_GetFolderChildren(pMaster, NULL, NULL, NULL);
folderInfos = new MSG_FolderInfo*[iCount];
if (folderInfos) {
int nLevelTotal = 0;
BOOL bAddSep = FALSE;
MSG_GetFolderChildren(pMaster, NULL, folderInfos, iCount);
for (i = 0; i < iCount; i++) {
if (MSG_GetFolderLineById(pMaster, folderInfos[i], &folderLine)) {
if (folderLine.flags & MSG_FOLDER_FLAG_MAIL) {
if ( bAddSep ) {
::AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
}
UpdateMenu(folderInfos[i], hMenu, nID, nLevelTotal);
nLevelTotal = MSG_GetFolderChildren( pMaster, folderInfos[i],
NULL, NULL);
bAddSep = TRUE;
}
}
}
delete [] folderInfos;
}
return;
}
MSG_GetFolderLineById( pMaster, mailRoot, &folderLine );
if ( folderLine.level > 1 ) { // We're a child folder
sprintf( buffer, "&%d %s", j, szLoadString(IDS_MAIL_THISFOLDER));
::AppendMenu( hMenu, MF_STRING, nID, buffer);
::AppendMenu( hMenu, MF_SEPARATOR, NULL, NULL);
nID++;
j++;
}
iCount = MSG_GetFolderChildren( pMaster, mailRoot, NULL, NULL );
folderInfos = new MSG_FolderInfo*[iCount];
if (folderInfos) {
MSG_GetFolderChildren( pMaster, mailRoot, folderInfos, iCount );
for ( i = 0; i < iCount; i++) {
if ( MSG_GetFolderLineById( pMaster, folderInfos[ i ], &folderLine ) ) {
if (j < 10) {
sprintf( buffer, "&%d %s", j, folderLine.name);
} else if ( j < 36 ) {
sprintf( buffer, "&%c %s", 'a' + j - 10, folderLine.name);
} else {
sprintf( buffer, " %s", folderLine.name);
}
if ( folderLine.numChildren > 0 ) {
HMENU hNewMenu = ::CreatePopupMenu();
UpdateMenu( folderInfos[ i ], hNewMenu, nID);
::AppendMenu( hMenu, MF_STRING|MF_POPUP, (UINT) hNewMenu, buffer);
} else {
::AppendMenu( hMenu, MF_STRING, nID, buffer);
nID++;
}
j++;
}
}
delete [] folderInfos;
}
}
void CMailNewsFrame::UpdateFileMenus()
{
HMENU hFrameMenu = ::GetMenu( m_hWnd );
ASSERT( hFrameMenu );
if( hFrameMenu ) {
HMENU hMessage = ::GetSubMenu( hFrameMenu, m_iMessageMenuPos );
if ( hMessage ) {
UINT idMove = FIRST_MOVE_MENU_ID;
UINT idCopy = FIRST_COPY_MENU_ID;
HMENU hMove = ::GetSubMenu( hMessage, m_iMoveMenuPos );
HMENU hCopy = NULL;
if ( m_iCopyMenuPos > -1 )
hCopy = ::GetSubMenu( hMessage, m_iCopyMenuPos );
// we don't alway have a copy menu
if( hMove ) {
UpdateMenu( NULL, hMove, idMove );
}
if (hCopy) {
UpdateMenu( NULL, hCopy, idCopy );
}
}
}
DrawMenuBar();
}
void CMailNewsFrame::UpdateAttachmentMenus()
{
HMENU hFrameMenu = ::GetMenu( m_hWnd );
ASSERT( hFrameMenu );
if( hFrameMenu ) {
HMENU hFile = ::GetSubMenu( hFrameMenu, m_iFileMenuPos );
if ( hFile ) {
int i;
char buffer[_MAX_PATH];
UINT idAttach = FIRST_ATTACH_MENU_ID;
HMENU hAttach = ::GetSubMenu( hFile, m_iAttachMenuPos );
int iCount = ::GetMenuItemCount( hAttach );
for( i = 0; i < iCount; i++)
::DeleteMenu( hAttach, 0, MF_BYPOSITION );
if (m_pAttachmentData) {
for ( i = 0; m_pAttachmentData[i].url; i++ ) {
const char *name = m_pAttachmentData[i].real_name ?
m_pAttachmentData[i].real_name :
szLoadString(IDS_UNTITLED);
if (i < 10) {
sprintf( buffer, "&%d %s", i, name);
} else {
strcpy(buffer, name);
}
::AppendMenu( hAttach, MF_STRING, idAttach + i, buffer);
}
} else {
::AppendMenu( hAttach, MF_STRING, idAttach, szLoadString(IDS_NOATTACHMENTS));
}
}
}
}
void CMailNewsFrame::ModalStatusBegin( int iModalDelay )
{
if ( iModalDelay > -1 ) {
LPNSSTATUSBAR pIStatusBar = NULL;
m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->ModalStatus( TRUE, iModalDelay );
pIStatusBar->Release();
}
}
}
void CMailNewsFrame::ModalStatusEnd()
{
LPNSSTATUSBAR pIStatusBar = NULL;
m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
if ( pIStatusBar ) {
pIStatusBar->ModalStatus( FALSE, 0 );
pIStatusBar->Release();
}
}
void CMailNewsFrame::DoUpdateCommand( CCmdUI* pCmdUI, MSG_CommandType cmd, BOOL bUseCheck )
{
XP_Bool bSelectable = FALSE, bPlural = FALSE;
MSG_COMMAND_CHECK_STATE sState;
const char *display_string;
if (m_pPane) {
MSG_ViewIndex *indices = NULL;
int count = 0;
if (m_pOutliner)
m_pOutliner->GetSelection(indices, count);
MSG_CommandStatus(m_pPane,
cmd,
indices, count,
&bSelectable,
&sState,
&display_string,
&bPlural);
}
pCmdUI->Enable(bSelectable);
if (bUseCheck)
pCmdUI->SetCheck(sState == MSG_Checked);
else
pCmdUI->SetRadio(sState == MSG_Checked);
}
void CMailNewsFrame::DoCommand( MSG_CommandType msgCommand, int iModalDelay, BOOL bAsync )
{
#ifdef DEBUG_WHITEBOX
QA_Trace("CMailNewsFrame:Do Command parameters = MSG_CommandType %d, iModalDelay %d, bAsync %d",
(int) msgCommand, iModalDelay, (int) bAsync);
#endif
ModalStatusBegin( iModalDelay );
CMailNewsOutliner* pOutliner;
if (msgCommand == MSG_DeleteFolder &&
IsKindOf(RUNTIME_CLASS(C3PaneMailFrame)))
pOutliner = ((C3PaneMailFrame*)this)->GetFolderOutliner();
else
pOutliner = m_pOutliner;
MSG_ViewIndex *indices = NULL;
int count = 0;
if (pOutliner)
pOutliner->GetSelection(indices, count);
#ifdef DEBUG_WHITEBOX
QA_Trace("Return from GetSelection: count = %d",count);
for (int i = 0; i < count; i++)
{
QA_Trace("indices[%d] = %d",i,*(indices+i));
}
#endif
MSG_Pane *pPane = pOutliner ? pOutliner->GetPane(): m_pPane;
MSG_Command(pPane, msgCommand, indices, count);
if (!bAsync)
ModalStatusEnd();
}
void CMailNewsFrame::DoUpdateMessageCommand( CCmdUI* pCmdUI, MSG_CommandType tMenuType, BOOL bUseCheck )
{
XP_Bool bSelectable = FALSE, bPlural = FALSE;
const char *szTitle;
MSG_COMMAND_CHECK_STATE sState = MSG_Unchecked;
if ( m_pMessagePane ) {
if (m_pOutliner) {
MsgViewIndex *indices;
int iCount;
m_pOutliner->GetSelection( indices, iCount );
MSG_CommandStatus(m_pMessagePane,
tMenuType,
indices, iCount,
&bSelectable,
&sState,
&szTitle,
&bPlural );
} else {
MSG_FolderInfo* folder;
MessageKey key;
MSG_ViewIndex viewIndex;
MSG_GetCurMessage( m_pMessagePane,
&folder,
&key, &viewIndex );
if ( key != MSG_MESSAGEKEYNONE ) {
MSG_CommandStatus(m_pMessagePane,
tMenuType,
&viewIndex, 1,
&bSelectable,
&sState,
&szTitle,
&bPlural );
}
}
}
pCmdUI->Enable(bSelectable);
if (bUseCheck)
pCmdUI->SetCheck(sState == MSG_Checked);
else
pCmdUI->SetRadio(sState == MSG_Checked);
}
void CMailNewsFrame::DoMessageCommand(MSG_CommandType msgCommand )
{
if ( m_pMessagePane ) {
if (m_pOutliner) {
MsgViewIndex *indices;
int iCount;
m_pOutliner->GetSelection( indices, iCount );
MSG_Command(m_pMessagePane, msgCommand, indices, iCount);
} else {
MSG_FolderInfo* folder;
MessageKey key;
MSG_ViewIndex viewIndex;
MSG_GetCurMessage( m_pMessagePane,
&folder,
&key,
&viewIndex);
if ( key != MSG_MESSAGEKEYNONE ) {
MSG_Command(m_pMessagePane, msgCommand, &viewIndex, 1);
}
}
}
}
// Reply button drop down menu
const UINT idArrayReply[] = { ID_MESSAGE_REPLY,
ID_MESSAGE_REPLYALL,
ID_MESSAGE_POSTREPLY,
ID_MESSAGE_POSTANDREPLY };
const UINT strArrayReply[] = { IDS_MENU_REPLY,
IDS_MENU_REPLYALL,
IDS_MENU_POSTREPLY,
IDS_MENU_POSTMAILREPLY };
// Mark button drop down menu
const UINT idArrayMark[] = { ID_MESSAGE_MARKASUNREAD,
ID_MESSAGE_MARKASREAD,
ID_MESSAGE_MARKTHREADREAD,
ID_MESSAGE_MARKALLREAD,
ID_MESSAGE_CATCHUP,
ID_MESSAGE_MARKASLATER };
const UINT strArrayMark[] = { IDS_POPUP_MARKASUNREAD,
IDS_POPUP_MARKASREAD,
IDS_POPUP_MARKTHREADREAD,
IDS_POPUP_MARKALLREAD,
IDS_POPUP_CATCHUP,
IDS_POPUP_MARKFORLATER };
const UINT idArrayNext[] = { ID_MESSAGE_NEXT,
ID_MESSAGE_NEXTUNREAD,
ID_MESSAGE_NEXTFLAGGED,
ID_MESSAGE_NEXTUNREADTHREAD,
ID_MESSAGE_NEXTNEWSGROUP,
ID_MESSAGE_NEXTUNREADNEWSGROUP };
const UINT strArrayNext[] = { IDS_POPUP_NEXTMESSAGE,
IDS_POPUP_NEXTUNREADMSG,
IDS_POPUP_NEXTFLAGGEDMSG,
IDS_POPUP_NEXTUNREADTHREAD,
IDS_POPUP_NEXTFOLDER,
IDS_POPUP_NEXTUNREADFOLDER };
LRESULT CMailNewsFrame::OnButtonMenuOpen(WPARAM wParam, LPARAM lParam)
{
HMENU hMenu = (HMENU) lParam;
UINT nCommand = (UINT) LOWORD(wParam);
const UINT *idArray = NULL;
const UINT *strArray = NULL;
int nSize = 0;
if(nCommand == ID_MESSAGE_REPLYBUTTON) {
idArray = idArrayReply;
strArray = strArrayReply;
if (m_bNews) {
nSize = 4;
} else {
nSize = 2;
}
} else if (nCommand == ID_MESSAGE_MARKBUTTON ) {
idArray = idArrayMark;
strArray = strArrayMark;
nSize = 6;
} else if (nCommand == ID_MESSAGE_NEXTUNREAD ) {
idArray = idArrayNext;
strArray = strArrayNext;
nSize = 6;
}
if ( nSize > 0 ) {
CString str;
for(int i = 0; i < nSize; i++)
{
str.LoadString(strArray[i]);
AppendMenu(hMenu, MF_STRING, idArray[i], (const char*) str);
}
}
return 1;
}
// File Menu Items
void CMailNewsFrame::OnAddNewsGroup ( )
{
DoCommand(MSG_AddNewsGroup);
}
void CMailNewsFrame::OnUpdateAddNewsGroup(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_AddNewsGroup);
}
void CMailNewsFrame::DoSubscribe(MSG_Host* pThisHost)
{
BeginWaitCursor();
MWContext *pContext = GetMainContext() != NULL ?
GetMainContext()->GetContext() : NULL;
// fix for bug#58453 Change Prefs news dir with no news files
// then Subscribe. Crashes.
MSG_NewsHost* defhost = NULL;
defhost = MSG_GetDefaultNewsHost(WFE_MSGGetMaster());
if (defhost == NULL)
{
FE_Alert(pContext, XP_GetString(MK_NNTP_SERVER_NOT_CONFIGURED));
return;
}
CString title;
title.LoadString(IDS_SUBSCRIBE_GROUP);
CSubscribePropertySheet SubscribeNewsgroup(this, pContext, title);
if (pThisHost)
SubscribeNewsgroup.SetHost(pThisHost);
else
{
MSG_FolderInfo* pFolderInfo = GetCurFolder();
if (pFolderInfo)
{
MSG_FolderLine folderLine;
if (MSG_GetFolderLineById(WFE_MSGGetMaster(), pFolderInfo,
&folderLine))
{
MSG_Host *pHost = MSG_GetHostForFolder(pFolderInfo);
SubscribeNewsgroup.SetHost(pHost);
}
}
}
SubscribeNewsgroup.DoModal();
EndWaitCursor();
}
void CMailNewsFrame::OnSubscribe ( )
{
DoSubscribe(NULL);
}
void CMailNewsFrame::OnUpdateSubscribe(CCmdUI* pCmdUI)
{
pCmdUI->Enable (TRUE);
}
void CMailNewsFrame::OnUnsubscribe ( )
{
DoCommand(MSG_Unsubscribe);
}
void CMailNewsFrame::OnUpdateUnsubscribe(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_Unsubscribe);
}
void CMailNewsFrame::OnOpenAttach(UINT nID)
{
int idx = nID - FIRST_ATTACH_MENU_ID;
if (idx < m_nAttachmentCount)
GetContext()->NormalGetUrl(m_pAttachmentData[idx].url);
}
void CMailNewsFrame::OnUpdateOpenAttach(CCmdUI *pCmdUI)
{
int idx = pCmdUI->m_nID - FIRST_ATTACH_MENU_ID;
if (pCmdUI->m_pSubMenu) {
pCmdUI->m_pMenu->EnableMenuItem(pCmdUI->m_nIndex,
MF_BYPOSITION |
((m_nAttachmentCount > 0) ? MF_ENABLED : MF_GRAYED));
} else {
pCmdUI->Enable(idx < m_nAttachmentCount);
}
}
void CMailNewsFrame::OnSaveAttach(UINT nID)
{
int idx = nID - FIRST_SAVEATTACH_MENU_ID;
if (idx < m_nAttachmentCount)
CSaveCX::SaveAnchorObject(m_pAttachmentData[idx].url, NULL);
}
void CMailNewsFrame::OnUpdateSaveAttach(CCmdUI *pCmdUI)
{
int idx = pCmdUI->m_nID - FIRST_SAVEATTACH_MENU_ID;
pCmdUI->Enable(idx < m_nAttachmentCount);
}
void CMailNewsFrame::OnAttachProperties(UINT nID)
{
int idx = nID - FIRST_ATTACHPROP_MENU_ID;
CAttachmentSheet sheet(this,
m_pAttachmentData[idx].real_name,
m_pAttachmentData[idx].real_type,
m_pAttachmentData[idx].description);
sheet.DoModal();
}
void CMailNewsFrame::OnUpdateAttachProperties(CCmdUI *pCmdUI)
{
int idx = pCmdUI->m_nID - FIRST_ATTACHPROP_MENU_ID;
pCmdUI->Enable(idx < m_nAttachmentCount);
}
// Edit Menu Items
void CMailNewsFrame::OnEditUndo()
{
DoCommand(MSG_Undo);
}
void CMailNewsFrame::OnUpdateEditUndo ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_Undo);
}
void CMailNewsFrame::OnEditRedo()
{
DoCommand(MSG_Redo);
}
void CMailNewsFrame::OnUpdateEditRedo ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_Redo);
}
// hack for message backtracking
void CMailNewsFrame::OnGoBack()
{
DoNavigate(MSG_Back);
}
void CMailNewsFrame::OnUpdateGoBack ( CCmdUI* pCmdUI )
{
DoUpdateNavigate(pCmdUI, MSG_Back);
}
void CMailNewsFrame::OnGoForward()
{
DoNavigate(MSG_Forward);
}
void CMailNewsFrame::OnUpdateGoForward ( CCmdUI* pCmdUI )
{
DoUpdateNavigate(pCmdUI, MSG_Forward);
}
void CMailNewsFrame::OnDeleteFolder( )
{
CMailNewsOutliner* pOutliner;
if (IsKindOf(RUNTIME_CLASS(C3PaneMailFrame)))
pOutliner = ((C3PaneMailFrame*)this)->GetFolderOutliner();
else
pOutliner = m_pOutliner;
MSG_ViewIndex *indices;
int count;
pOutliner->GetSelection(indices, count);
DoCommand(MSG_DeleteFolder);
}
void CMailNewsFrame::OnUpdateDeleteFolder(CCmdUI* pCmdUI)
{
MSG_FolderInfo *folderInfo = GetCurFolder();
if ( folderInfo ) {
MSG_FolderLine folderLine;
MSG_GetFolderLineById( WFE_MSGGetMaster(), folderInfo, &folderLine );
if ( pCmdUI->m_nID == ID_EDIT_DELETEFOLDER ) {
if ( folderLine.flags & MSG_FOLDER_FLAG_NEWS_HOST ) {
pCmdUI->SetText( szLoadString( IDS_MENU_DELETENEWSHOST ) );
} else if ( folderLine.flags & MSG_FOLDER_FLAG_NEWSGROUP ) {
pCmdUI->SetText( szLoadString( IDS_MENU_DELETENEWSGROUP ) );
} else {
// We shouldn't use the popup item, except that
// we're don't want to add a string at this point
pCmdUI->SetText( szLoadString( IDS_POPUP_DELETEFOLDER ) );
}
}
} else {
pCmdUI->SetText( szLoadString( IDS_MENU_DELETESELECTION ) );
}
DoUpdateCommand(pCmdUI, MSG_DeleteFolder);
}
void CMailNewsFrame::OnDeleteMessage( )
{
if ( m_bNews ) {
DoCommand(MSG_CancelMessage, MODAL_DELAY);
} else {
#ifdef DEBUG_WHITEBOX
QA_Trace("Entering CMailNewsFrame:DoCommand");
#endif
DoCommand(MSG_DeleteMessage, MODAL_DELAY);
#ifdef DEBUG_WHITEBOX
QA_Trace("Finished CMailNewsFrame:DoCommand");
#endif
}
}
void CMailNewsFrame::OnReallyDeleteMessage( )
{
if ( m_bNews ) {
DoCommand(MSG_CancelMessage, MODAL_DELAY);
} else {
DoCommand(MSG_DeleteMessageNoTrash, MODAL_DELAY);
}
}
void CMailNewsFrame::OnUpdateDeleteMessage(CCmdUI* pCmdUI)
{
if (IsKindOf(RUNTIME_CLASS(C3PaneMailFrame)))
{
if (GetFocus() == (CWnd*)((C3PaneMailFrame*)this)->GetFolderOutliner())
{
pCmdUI->Enable(FALSE);
return;
}
else
pCmdUI->Enable(TRUE);
}
if ( m_bNews ) {
pCmdUI->SetText( szLoadString( IDS_MENU_CANCELMESSAGE ) );
DoUpdateCommand(pCmdUI, MSG_CancelMessage);
} else {
pCmdUI->SetText( szLoadString( IDS_MENU_DELETEMESSAGE ) );
DoUpdateCommand(pCmdUI, MSG_DeleteMessage);
}
}
void CMailNewsFrame::OnSelectAll()
{
if (m_pOutliner ) {
m_pOutliner->SelectRange( 0, -1, TRUE );
}
}
void CMailNewsFrame::OnUpdateSelectAll ( CCmdUI* pCmdUI )
{
if (m_pOutliner && m_pOutliner->GetTotalLines() > 0 ) {
pCmdUI->Enable( TRUE );
} else {
pCmdUI->Enable( FALSE );
}
}
void CMailNewsFrame::OnCancelMessage()
{
DoCommand(MSG_CancelMessage);
}
void CMailNewsFrame::OnUpdateCancelMessage ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_CancelMessage);
}
// View Menu Items
void CMailNewsFrame::OnSortAgain ( )
{
DoCommand(MSG_ReSort);
}
void CMailNewsFrame::OnUpdateSortAgain(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ReSort);
}
void CMailNewsFrame::OnAscending( )
{
if ( MSG_GetToggleStatus( m_pPane, MSG_SortBackward, NULL, 0 ) == MSG_Checked ) {
DoCommand(MSG_SortBackward);
SetSort(-1);
}
}
void CMailNewsFrame::OnUpdateAscending(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TRUE);
#ifdef _WIN32
pCmdUI->SetRadio(MSG_GetToggleStatus( m_pPane, MSG_SortBackward, NULL, 0 ) != MSG_Checked);
#else
pCmdUI->SetCheck(MSG_GetToggleStatus( m_pPane, MSG_SortBackward, NULL, 0 ) != MSG_Checked);
#endif
}
void CMailNewsFrame::OnDescending( )
{
if ( MSG_GetToggleStatus( m_pPane, MSG_SortBackward, NULL, 0 ) != MSG_Checked ) {
DoCommand(MSG_SortBackward);
SetSort(-1);
}
}
void CMailNewsFrame::OnUpdateDescending(CCmdUI* pCmdUI)
{
pCmdUI->Enable(TRUE);
#ifdef _WIN32
pCmdUI->SetRadio(MSG_GetToggleStatus( m_pPane, MSG_SortBackward, NULL, 0 ) == MSG_Checked);
#else
pCmdUI->SetCheck(MSG_GetToggleStatus( m_pPane, MSG_SortBackward, NULL, 0 ) == MSG_Checked);
#endif
}
void CMailNewsFrame::OnSortDate()
{
DoCommand(MSG_SortByDate);
SetSort(SORT_BYDATE);
}
void CMailNewsFrame::OnUpdateSortDate ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortByDate);
}
void CMailNewsFrame::OnSortNumber()
{
DoCommand(MSG_SortByMessageNumber);
SetSort(SORT_BYNUMBER);
}
void CMailNewsFrame::OnUpdateSortNumber ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortByMessageNumber);
}
void CMailNewsFrame::OnSortSubject()
{
DoCommand(MSG_SortBySubject);
SetSort(SORT_BYSUBJECT);
}
void CMailNewsFrame::OnUpdateSortSubject ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortBySubject);
}
void CMailNewsFrame::OnSortSender()
{
DoCommand(MSG_SortBySender);
SetSort(SORT_BYSENDER);
}
void CMailNewsFrame::OnUpdateSortSender ( CCmdUI* pCmdUI )
{
if (MSG_DisplayingRecipients(m_pPane)) {
CString cs;
cs.LoadString(IDS_MAIL_BYRECIPIENT);
pCmdUI->SetText(cs);
}
DoUpdateCommand(pCmdUI, MSG_SortBySender);
}
void CMailNewsFrame::OnSortPriority()
{
DoCommand(MSG_SortByPriority);
SetSort(SORT_BYPRIORITY);
}
void CMailNewsFrame::OnUpdateSortPriority( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortByPriority);
}
void CMailNewsFrame::OnSortStatus()
{
DoCommand(MSG_SortByStatus);
SetSort(SORT_BYSTATUS);
}
void CMailNewsFrame::OnUpdateSortStatus( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortByStatus);
}
void CMailNewsFrame::OnSortSize()
{
DoCommand(MSG_SortBySize);
SetSort(SORT_BYSIZE);
}
void CMailNewsFrame::OnUpdateSortSize( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortBySize);
}
void CMailNewsFrame::OnSortFlag()
{
DoCommand(MSG_SortByFlagged);
SetSort(SORT_BYFLAG);
}
void CMailNewsFrame::OnUpdateSortFlag( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortByFlagged);
}
void CMailNewsFrame::OnSortUnread()
{
DoCommand(MSG_SortByUnread);
SetSort(SORT_BYUNREAD);
}
void CMailNewsFrame::OnUpdateSortUnread( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_SortByUnread);
}
void CMailNewsFrame::OnThread ( )
{
DoCommand(MSG_SortByThread);
SetSort(SORT_BYTHREAD);
}
void CMailNewsFrame::OnUpdateThread(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_SortByThread);
}
void CMailNewsFrame::OnViewAll()
{
DoCommand(MSG_ViewAllThreads);
if ( m_pOutliner )
m_pOutliner->GetParent()->Invalidate();
}
void CMailNewsFrame::OnUpdateViewAll( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ViewAllThreads);
}
void CMailNewsFrame::OnViewKilled()
{
DoCommand(MSG_ViewKilledThreads);
if ( m_pOutliner )
m_pOutliner->GetParent()->Invalidate();
}
void CMailNewsFrame::OnUpdateViewKilled( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ViewKilledThreads, TRUE);
}
void CMailNewsFrame::OnViewNew()
{
DoCommand(MSG_ViewThreadsWithNew);
if ( m_pOutliner )
m_pOutliner->GetParent()->Invalidate();
}
void CMailNewsFrame::OnUpdateViewNew( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ViewThreadsWithNew);
}
void CMailNewsFrame::OnViewNewOnly()
{
DoCommand(MSG_ViewNewOnly);
if ( m_pOutliner )
m_pOutliner->GetParent()->Invalidate();
}
void CMailNewsFrame::OnUpdateViewNewOnly( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ViewNewOnly);
}
void CMailNewsFrame::OnViewWatched()
{
DoCommand(MSG_ViewWatchedThreadsWithNew);
if ( m_pOutliner )
m_pOutliner->GetParent()->Invalidate();
}
void CMailNewsFrame::OnUpdateViewWatched( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ViewWatchedThreadsWithNew);
}
void CMailNewsFrame::OnViewInline(void)
{
DoMessageCommand(MSG_AttachmentsInline);
}
void CMailNewsFrame::OnUpdateViewInline(CCmdUI* pCmdUI)
{
DoUpdateMessageCommand(pCmdUI, MSG_AttachmentsInline, FALSE);
}
void CMailNewsFrame::OnViewAsLinks(void)
{
DoMessageCommand(MSG_AttachmentsAsLinks);
}
void CMailNewsFrame::OnUpdateViewAsLinks(CCmdUI* pCmdUI)
{
DoUpdateMessageCommand(pCmdUI, MSG_AttachmentsAsLinks, FALSE);
}
void CMailNewsFrame::OnHeadersMicro()
{
DoMessageCommand(MSG_ShowMicroHeaders);
}
void CMailNewsFrame::OnUpdateHeadersMicro(CCmdUI* pCmdUI)
{
DoUpdateMessageCommand( pCmdUI, MSG_ShowMicroHeaders );
}
void CMailNewsFrame::OnHeadersShort()
{
DoMessageCommand(MSG_ShowSomeHeaders);
}
void CMailNewsFrame::OnUpdateHeadersShort(CCmdUI* pCmdUI)
{
DoUpdateMessageCommand( pCmdUI, MSG_ShowSomeHeaders );
}
void CMailNewsFrame::OnHeadersAll()
{
DoMessageCommand(MSG_ShowAllHeaders);
}
void CMailNewsFrame::OnUpdateHeadersAll(CCmdUI* pCmdUI)
{
DoUpdateMessageCommand( pCmdUI, MSG_ShowAllHeaders );
}
// Navigation Menu Items
void CMailNewsFrame::OnPreviousUnread ( )
{
DoNavigate( MSG_PreviousUnreadMessage );
}
void CMailNewsFrame::OnUpdatePreviousUnread(CCmdUI* pCmdUI)
{
DoUpdateNavigate( pCmdUI, MSG_PreviousUnreadMessage );
}
void CMailNewsFrame::OnPrevious ( )
{
DoNavigate( MSG_PreviousMessage );
}
void CMailNewsFrame::OnUpdatePrevious(CCmdUI* pCmdUI)
{
DoUpdateNavigate( pCmdUI, MSG_PreviousMessage );
}
void CMailNewsFrame::OnNextUnread ( )
{
DoNavigate( MSG_NextUnreadMessage );
}
void CMailNewsFrame::OnUpdateNextUnread(CCmdUI* pCmdUI)
{
if (pCmdUI->m_pMenu)
DoUpdateNavigate( pCmdUI, MSG_NextUnreadMessage );
else // We're the toolbar button, always enable (sigh)
pCmdUI->Enable(TRUE);
}
void CMailNewsFrame::OnNext ( )
{
DoNavigate( MSG_NextMessage );
}
void CMailNewsFrame::OnUpdateNext(CCmdUI* pCmdUI)
{
DoUpdateNavigate( pCmdUI, MSG_NextMessage );
}
void CMailNewsFrame::OnNextFolder( )
{
DoNavigate( MSG_NextFolder );
}
void CMailNewsFrame::OnUpdateNextFolder(CCmdUI* pCmdUI)
{
if (m_bNews)
pCmdUI->SetText(szLoadString(IDS_MENU_NEXTNEWSGROUP));
else
pCmdUI->SetText(szLoadString(IDS_MENU_NEXTFOLDER));
DoUpdateNavigate( pCmdUI, MSG_NextFolder );
}
void CMailNewsFrame::OnNextUnreadThread()
{
DoNavigate(MSG_NextUnreadThread);
}
void CMailNewsFrame::OnUpdateNextUnreadThread(CCmdUI* pCmdUI)
{
DoUpdateNavigate(pCmdUI, MSG_NextUnreadThread);
}
void CMailNewsFrame::OnNextUnreadFolder()
{
DoNavigate( MSG_NextUnreadGroup );
}
void CMailNewsFrame::OnUpdateNextUnreadFolder(CCmdUI* pCmdUI)
{
if (m_bNews)
pCmdUI->SetText(szLoadString(IDS_MENU_NEXTUNREADNEWSGROUP));
else
pCmdUI->SetText(szLoadString(IDS_MENU_NEXTUNREADFOLDER));
DoUpdateNavigate( pCmdUI, MSG_NextUnreadGroup );
}
void CMailNewsFrame::OnPreviousFlagged()
{
DoNavigate( MSG_PreviousFlagged );
}
void CMailNewsFrame::OnUpdatePreviousFlagged(CCmdUI* pCmdUI)
{
DoUpdateNavigate( pCmdUI, MSG_PreviousFlagged );
}
void CMailNewsFrame::OnNextFlagged()
{
DoNavigate( MSG_NextFlagged );
}
void CMailNewsFrame::OnUpdateNextFlagged(CCmdUI* pCmdUI)
{
DoUpdateNavigate( pCmdUI, MSG_NextFlagged );
}
void CMailNewsFrame::OnFirstFlagged()
{
DoNavigate( MSG_FirstFlagged );
}
void CMailNewsFrame::OnUpdateFirstFlagged(CCmdUI* pCmdUI)
{
DoUpdateNavigate( pCmdUI, MSG_FirstFlagged );
}
// Message Menu Items
void CMailNewsFrame::OnNew( )
{
if (m_bNews)
DoCommand(MSG_PostNew);
else
DoCommand(MSG_MailNew);
}
void CMailNewsFrame::OnUpdateNew(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_MailNew);
}
void CMailNewsFrame::OnNewNewsgroup()
{
DoCommand(MSG_NewNewsgroup);
}
void CMailNewsFrame::OnUpdateNewNewsgroup(CCmdUI *pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_NewNewsgroup);
}
void CMailNewsFrame::OnNewNewshost()
{
DoAddNewsServer(this, FROM_FOLDERPANE);
}
void CMailNewsFrame::OnUpdateNewNewshost(CCmdUI *pCmdUI)
{
pCmdUI->Enable(TRUE);
}
void CMailNewsFrame::OnNewCategory()
{
DoCommand(MSG_NewCategory);
}
void CMailNewsFrame::OnUpdateNewCategory(CCmdUI *pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_NewCategory);
}
void CMailNewsFrame::OnKill()
{
DoNavigate((MSG_MotionType) MSG_ToggleThreadKilled);
}
void CMailNewsFrame::OnUpdateKill(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ToggleThreadKilled );
}
void CMailNewsFrame::OnWatch()
{
DoCommand(MSG_ToggleThreadWatched);
}
void CMailNewsFrame::OnUpdateWatch(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ToggleThreadWatched, FALSE);
}
void CMailNewsFrame::OnPostAndMailReply()
{
DoCommand(MSG_PostAndMailReply);
}
void CMailNewsFrame::OnUpdatePostAndMailReply(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_PostAndMailReply);
}
void CMailNewsFrame::OnPostReply()
{
DoCommand(MSG_PostReply);
}
void CMailNewsFrame::OnUpdatePostReply(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_PostReply);
}
void CMailNewsFrame::OnReply()
{
DoCommand(MSG_ReplyToSender);
}
void CMailNewsFrame::OnUpdateReply(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ReplyToSender);
}
void CMailNewsFrame::OnReplyAll()
{
DoCommand(MSG_ReplyToAll);
}
void CMailNewsFrame::OnUpdateReplyAll(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ReplyToAll);
}
void CMailNewsFrame::OnForward()
{
DoCommand(MSG_ForwardMessage);
}
void CMailNewsFrame::OnUpdateForward(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ForwardMessage);
}
void CMailNewsFrame::OnForwardQuoted()
{
DoCommand(MSG_ForwardMessageQuoted);
}
void CMailNewsFrame::OnUpdateForwardQuoted(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_ForwardMessageQuoted);
}
void CMailNewsFrame::OnSave ( )
{
DoCommand(MSG_SaveMessagesAs);
}
void CMailNewsFrame::OnUpdateSave(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_SaveMessagesAs);
}
void CMailNewsFrame::OnEditMessage ( )
{
DoCommand(MSG_OpenMessageAsDraft);
}
void CMailNewsFrame::OnUpdateEditMessage(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_OpenMessageAsDraft);
}
void CMailNewsFrame::OnPostAndMail()
{
DoCommand(MSG_PostAndMailReply);
}
void CMailNewsFrame::OnUpdatePostAndMail ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_PostAndMailReply);
}
void CMailNewsFrame::OnMarkMessagesRead()
{
DoCommand(MSG_MarkMessagesRead);
}
void CMailNewsFrame::OnRetrieveSelected()
{
DoCommand(MSG_RetrieveSelectedMessages);
}
void CMailNewsFrame::OnUpdateRetrieveSelected( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_RetrieveSelectedMessages);
}
void CMailNewsFrame::OnUpdateMarkMessagesRead ( CCmdUI* pCmdUI )
{
DoUpdateCommand( pCmdUI, MSG_MarkMessagesRead );
}
void CMailNewsFrame::OnMarkMessagesUnread()
{
DoCommand( MSG_MarkMessagesUnread );
}
void CMailNewsFrame::OnUpdateMarkMessagesUnread ( CCmdUI* pCmdUI )
{
DoUpdateCommand( pCmdUI, MSG_MarkMessagesUnread );
}
void CMailNewsFrame::OnMarkThreadRead()
{
DoCommand( MSG_MarkThreadRead );
}
void CMailNewsFrame::OnUpdateMarkThreadRead( CCmdUI *pCmdUI )
{
DoUpdateCommand( pCmdUI, MSG_MarkThreadRead );
}
void CMailNewsFrame::OnMarkAllRead()
{
DoCommand( MSG_MarkAllRead );
}
void CMailNewsFrame::OnUpdateMarkAllRead( CCmdUI *pCmdUI )
{
DoUpdateCommand( pCmdUI, MSG_MarkAllRead );
}
void CMailNewsFrame::OnCatchup()
{
CMarkReadDateDlg dlg(CMarkReadDateDlg::IDD, this);
if (dlg.DoModal()) {
MSG_MarkReadByDate ( m_pPane, 0, dlg.dateTo.GetTime() );
}
}
void CMailNewsFrame::OnUpdateCatchup( CCmdUI *pCmdUI )
{
// We use MarkAllRead because it's enabled state
// should be the same
DoUpdateCommand(pCmdUI, MSG_MarkAllRead);
}
void CMailNewsFrame::OnMarkMessagesLater()
{
DoNavigate( MSG_LaterMessage );
}
void CMailNewsFrame::OnUpdateMarkMessagesLater( CCmdUI *pCmdUI )
{
DoUpdateNavigate( pCmdUI, MSG_LaterMessage);
}
void CMailNewsFrame::OnRetrieveOffline()
{
DoCommand(MSG_RetrieveMarkedMessages);
}
void CMailNewsFrame::OnUpdateRetrieveOffline( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_RetrieveMarkedMessages);
}
void CMailNewsFrame::OnMarkMessages()
{
DoCommand( MSG_MarkMessages );
if (m_pOutliner)
DOWNCAST(CMessageOutliner, m_pOutliner)->EnsureFlagsVisible();
}
void CMailNewsFrame::OnUpdateMarkMessages( CCmdUI *pCmdUI )
{
DoUpdateCommand( pCmdUI, MSG_MarkMessages );
}
void CMailNewsFrame::OnUnmarkMessages()
{
DoCommand( MSG_UnmarkMessages );
if (m_pOutliner)
DOWNCAST(CMessageOutliner, m_pOutliner)->EnsureFlagsVisible();
}
void CMailNewsFrame::OnUpdateUnmarkMessages( CCmdUI *pCmdUI )
{
DoUpdateCommand( pCmdUI, MSG_UnmarkMessages );
}
void CMailNewsFrame::OnPostNew ( )
{
DoCommand(MSG_PostNew);
}
void CMailNewsFrame::OnUpdatePostNew(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_PostNew);
}
void CMailNewsFrame::OnWrapLongLines ( )
{
DoMessageCommand(MSG_WrapLongLines);
}
void CMailNewsFrame::OnUpdateWrapLongLines ( CCmdUI * pCmdUI )
{
DoUpdateMessageCommand( pCmdUI, MSG_WrapLongLines );
}
void CMailNewsFrame::OnViewRot13 ( )
{
DoMessageCommand(MSG_Rot13Message);
}
void CMailNewsFrame::OnUpdateViewRot13 ( CCmdUI * pCmdUI )
{
DoUpdateMessageCommand( pCmdUI, MSG_Rot13Message );
}
static BOOL s_bGettingMail = FALSE;
static void _GetMailCallback(HWND hwnd, MSG_Pane *pane, void *closure)
{
if (pane != NULL)
{
s_bGettingMail = TRUE;
MSG_Command( pane, MSG_GetNewMail, NULL, 0 );
::ShowWindow(hwnd, SW_SHOW);
}
}
static void _GetMailDoneCallback(HWND hwnd, MSG_Pane *pane, void *closure)
{
s_bGettingMail = FALSE;
for(CGenericFrame * f = theApp.m_pFrameList; f; f = f->m_pNext)
f->PostMessage(WM_COMMAND, (WPARAM) ID_DONEGETTINGMAIL, (LPARAM) 0);
}
static void _GetNextCallback(HWND hwnd, MSG_Pane *pane, void *closure)
{
if (pane != NULL)
{
XP_Bool bEnabled, bPlural;
MSG_COMMAND_CHECK_STATE stateSelected;
LPCSTR lpszLabel;
MSG_CommandStatus( pane, MSG_GetNextChunkMessages, NULL, 0,
&bEnabled, &stateSelected,
&lpszLabel, &bPlural );
if ( !bEnabled ) {
::PostMessage(hwnd,WM_DESTROY,0,0);
}
MSG_Command( pane, MSG_GetNextChunkMessages, NULL, 0 );
}
}
static void _CompressFoldersCallback(HWND hwnd, MSG_Pane *pane, void *closure)
{
if (pane != NULL)
{
MSG_Command( pane, MSG_CompressAllFolders, NULL, 0 );
::ShowWindow(hwnd, SW_SHOW);
}
}
typedef struct {
MSG_ViewIndex *indices;
int count;
} CompressFolderClosure;
static void _CompressFolderCallback(HWND hwnd, MSG_Pane *pane, void *closure)
{
CompressFolderClosure *cfc = (CompressFolderClosure *) closure;
if (pane != NULL)
{
MSG_Command(pane, MSG_CompressFolder, cfc->indices, cfc->count);
::ShowWindow(hwnd, SW_SHOW);
}
}
static void _EmptyTrashCallback(HWND hwnd, MSG_Pane *pane, void *closure)
{
if (pane != NULL)
{
MSG_Command( pane, MSG_EmptyTrash, NULL, 0 );
::ShowWindow(hwnd, SW_SHOW);
}
}
/////////////////////////////////////////////////////////////////////////////
void CMailNewsFrame::OnGetMail()
{
new CProgressDialog(this, m_pPane, _GetMailCallback, NULL, NULL, _GetMailDoneCallback);
}
void CMailNewsFrame::OnUpdateGetMail(CCmdUI *pCmdUI)
{
if (!s_bGettingMail)
DoUpdateCommand(pCmdUI, MSG_GetNewMail);
else
pCmdUI->Enable(FALSE);
}
void CMailNewsFrame::OnGetNext()
{
new CProgressDialog(this, m_pPane, _GetNextCallback);
}
void CMailNewsFrame::OnUpdateGetNext(CCmdUI *pCmdUI)
{
int32 iDownloadMax = 0;
PREF_GetIntPref("news.max_articles", &iDownloadMax);
CString cs;
cs.Format(szLoadString(IDS_MENU_GETNEXT), (int) iDownloadMax);
pCmdUI->SetText(cs);
DoUpdateCommand(pCmdUI, MSG_GetNextChunkMessages);
}
void CMailNewsFrame::OnDeliverNow()
{
DoCommand(MSG_DeliverQueuedMessages);
}
void CMailNewsFrame::OnUpdateDeliverNow(CCmdUI *pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_DeliverQueuedMessages);
}
void CMailNewsFrame::OnNewFolder ( )
{
if (m_bNews) {
if (m_bCategory)
OnNewCategory();
else
OnNewNewsgroup();
} else {
if (IsKindOf(RUNTIME_CLASS(C3PaneMailFrame)))
{
MSG_FolderLine folderLine;
if (((C3PaneMailFrame*)this)->GetSelectedFolder(&folderLine))
CNewFolderDialog( this, m_pPane, folderLine.id );
else
CNewFolderDialog( this, m_pPane, NULL );
}
else
CNewFolderDialog( this, m_pPane, GetCurFolder() );
}
}
void CMailNewsFrame::OnUpdateNewFolder(CCmdUI* pCmdUI)
{
if (m_bNews) {
if (m_bCategory) {
pCmdUI->SetText(szLoadString(IDS_MENU_NEWCATEGORY));
OnUpdateNewCategory(pCmdUI);
} else {
pCmdUI->SetText(szLoadString(IDS_MENU_NEWNEWSGROUP));
OnUpdateNewNewsgroup(pCmdUI);
}
} else {
pCmdUI->SetText(szLoadString(IDS_MENU_NEWFOLDER));
pCmdUI->Enable( TRUE );
}
}
void CMailNewsFrame::OnCompressFolder ( )
{
DoCommand(MSG_CompressFolder, 0);
}
void CMailNewsFrame::OnUpdateCompressFolder(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_CompressFolder);
}
void CMailNewsFrame::OnRenameFolder ( )
{
DoCommand(MSG_DoRenameFolder);
}
void CMailNewsFrame::OnUpdateRenameFolder(CCmdUI* pCmdUI)
{
DoUpdateCommand(pCmdUI, MSG_DoRenameFolder);
}
void CMailNewsFrame::OnCompressAll()
{
MSG_FolderInfo *folderInfo = GetCurFolder();
if (folderInfo) {
XP_Bool bCompressAll = TRUE;
MSG_FolderLine folderLine;
MSG_GetFolderLineById( WFE_MSGGetMaster(), GetCurFolder(), &folderLine );
if ( folderLine.flags & MSG_FOLDER_FLAG_IMAPBOX ) {
PREF_GetBoolPref("mail.imap.delete_is_move_to_trash", &bCompressAll);
}
if (!bCompressAll) {
CompressFolderClosure cfc;
cfc.indices = NULL;
cfc.count = 0;
if (MSG_GetPaneType(m_pPane) == MSG_FOLDERPANE && m_pOutliner) {
m_pOutliner->GetSelection(cfc.indices, cfc.count);
}
new CProgressDialog(this, m_pPane, _CompressFolderCallback,
&cfc, szLoadString(IDS_COMPRESSINGFOLDERS));
} else {
new CProgressDialog(this, m_pPane, _CompressFoldersCallback,
NULL, szLoadString(IDS_COMPRESSINGFOLDERS));
}
}
}
void CMailNewsFrame::OnUpdateCompressAll ( CCmdUI* pCmdUI )
{
MSG_FolderInfo *folderInfo = GetCurFolder();
if (folderInfo) {
XP_Bool bCompressAll = TRUE;
MSG_FolderLine folderLine;
MSG_GetFolderLineById( WFE_MSGGetMaster(), GetCurFolder(), &folderLine );
if ( folderLine.flags & MSG_FOLDER_FLAG_IMAPBOX ) {
PREF_GetBoolPref("mail.imap.delete_is_move_to_trash", &bCompressAll);
}
if (!bCompressAll) {
pCmdUI->SetText(szLoadString(IDS_MENU_COMPRESSFOLDER));
DoUpdateCommand(pCmdUI, MSG_CompressFolder);
} else {
pCmdUI->SetText(szLoadString(IDS_MENU_COMPRESSFOLDERS));
DoUpdateCommand(pCmdUI, MSG_CompressAllFolders);
}
} else {
pCmdUI->Enable(FALSE);
}
}
void CMailNewsFrame::OnEmptyTrash()
{
new CProgressDialog(this, m_pPane, _EmptyTrashCallback,
NULL, szLoadString(IDS_EMPTYINGTRASH));
}
void CMailNewsFrame::OnUpdateEmptyTrash ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_EmptyTrash);
}
void CMailNewsFrame::OnAddToAddressBook()
{
theApp.DoWaitCursor(1);
DoCommand(MSG_AddSender);
theApp.DoWaitCursor(-1);
}
void CMailNewsFrame::OnUpdateAddToAddressBook ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_AddSender);
}
void CMailNewsFrame::OnAddAllToAddressBook()
{
theApp.DoWaitCursor(1);
DoCommand(MSG_AddAll);
theApp.DoWaitCursor(-1);
}
void CMailNewsFrame::OnUpdateAddAllToAddressBook ( CCmdUI* pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_AddAll);
}
// Non-MSG Items
void CMailNewsFrame::OnTips()
{
if ( m_pOutliner ) {
m_pOutliner->EnableTips( TRUE );
}
}
void CMailNewsFrame::OnQuickFile()
{
}
void CMailNewsFrame::OnUpdateQuickFile( CCmdUI *pCmdUI )
{
if (m_pOutliner) {
MSG_ViewIndex *indices;
int count;
m_pOutliner->GetSelection( indices, count );
pCmdUI->Enable( count > 0 );
} else {
pCmdUI->Enable( TRUE );
}
}
// replace with Manage Mail Account
void CMailNewsFrame::OnSetupWizard()
{
DoCommand(MSG_ManageMailAccount);
}
void CMailNewsFrame::OnUpdateSetupWizard( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ManageMailAccount);
}
void CMailNewsFrame::OnServerStuff()
{
DoCommand(MSG_ModerateNewsgroup);
}
void CMailNewsFrame::OnUpdateServerStuff( CCmdUI *pCmdUI )
{
DoUpdateCommand(pCmdUI, MSG_ModerateNewsgroup);
}
void CMailNewsFrame::OnInterrupt()
{
// Let the context have it.
if(GetMainContext()) {
GetMainContext()->AllInterrupt();
}
}
void CMailNewsFrame::OnUpdateInterrupt( CCmdUI *pCmdUI )
{
// Defer to the context's wisdom.
pCmdUI->Enable( GetMainContext() && GetMainContext()->CanAllInterrupt() );
}
void CMailNewsFrame::OnPriorityLowest()
{
MSG_SetPriority( m_pPane,
GetCurMessage(),
MSG_LowestPriority );
}
void CMailNewsFrame::OnPriorityLow()
{
MSG_SetPriority( m_pPane,
GetCurMessage(),
MSG_LowPriority );
}
void CMailNewsFrame::OnPriorityNormal()
{
MSG_SetPriority( m_pPane,
GetCurMessage(),
MSG_NormalPriority );
}
void CMailNewsFrame::OnPriorityHigh()
{
MSG_SetPriority( m_pPane,
GetCurMessage(),
MSG_HighPriority );
}
void CMailNewsFrame::OnPriorityHighest()
{
MSG_SetPriority( m_pPane,
GetCurMessage(),
MSG_HighestPriority );
}
void CMailNewsFrame::OnUpdatePriority(CCmdUI *pCmdUI)
{
pCmdUI->Enable(GetCurMessage() != MSG_MESSAGEKEYNONE);
}
#define UNSEC_SIGNED_INDEX 7
#define UNSECURE_INDEX 8
#define SEC_SIGNED_INDEX 9
#define SECURE_INDEX 10
void CMailNewsFrame::OnUpdateSecurity(CCmdUI *pCmdUI)
{
XP_Bool bSigned = FALSE;
XP_Bool bEncrypted = FALSE;
MIME_GetMessageCryptoState(GetMainContext()->GetContext(),
0, 0,
&bSigned,
&bEncrypted);
if (m_bNews) {
int status = XP_GetSecurityStatus(GetMainContext()->GetContext());
if (status == SSL_SECURITY_STATUS_ON_LOW || status == SSL_SECURITY_STATUS_ON_HIGH)
bEncrypted = TRUE;
}
LPNSTOOLBAR pIToolBar;
m_pChrome->QueryInterface( IID_INSToolBar, (LPVOID *) &pIToolBar );
if ( pIToolBar ) {
CCommandToolbar *pToolBar = (CCommandToolbar *) CWnd::FromHandlePermanent( pIToolBar->GetHWnd() );
int index = bEncrypted ?
(bSigned ? SEC_SIGNED_INDEX : SECURE_INDEX) :
(bSigned ? UNSEC_SIGNED_INDEX : UNSECURE_INDEX);
pToolBar->ReplaceButtonBitmapIndex(ID_SECURITY, index);
pIToolBar->Release();
}
pCmdUI->Enable(TRUE);
}
void CMailNewsFrame::OnUpdateSecureStatus(CCmdUI *pCmdUI)
{
XP_Bool bSigned = FALSE;
XP_Bool bEncrypted = FALSE;
MIME_GetMessageCryptoState(GetMainContext()->GetContext(),
0, 0,
&bSigned,
&bEncrypted);
if (m_bNews) {
int status = XP_GetSecurityStatus(GetMainContext()->GetContext());
if (status == SSL_SECURITY_STATUS_ON_LOW || status == SSL_SECURITY_STATUS_ON_HIGH)
bEncrypted = TRUE;
}
if (pCmdUI->m_nID == IDS_SECURITY_STATUS)
pCmdUI->Enable(bEncrypted);
else
pCmdUI->Enable(bSigned);
}
void CMailNewsFrame::SetCSID( int csid ) {
if (m_iCSID != csid)
{
m_iCSID = csid;
if (m_pOutliner) {
m_pOutliner->SetCSID( csid );
}
if (m_pInfoBar) {
m_pInfoBar->SetCSID( csid );
}
GetContext()->NiceReload();
if ( m_pMessageView ) {
m_pMessageView->SetCSID( csid );
}
}
}
void CMailNewsFrame::RefreshNewEncoding(int16 doc_csid, BOOL bSave )
{
int16 win_csid = INTL_DocToWinCharSetID(doc_csid);
INTL_CharSetInfo c = LO_GetDocumentCharacterSetInfo( GetMainContext()->GetContext() );
INTL_SetCSIDocCSID( c, doc_csid );
INTL_SetCSIWinCSID( c, win_csid );
SetCSID( doc_csid );
if ( bSave ) {
MSG_FolderInfo *folderInfo = GetCurFolder();
if (m_bCategory)
folderInfo = MSG_GetCategoryContainerForCategory(folderInfo);
if (folderInfo) {
MSG_SetFolderCSID( folderInfo, doc_csid );
}
}
}
// CMsgListFrame
STDMETHODIMP CMsgListFrame::QueryInterface(REFIID refiid, LPVOID * ppv)
{
*ppv = NULL;
if (IsEqualIID(refiid,IID_IUnknown))
*ppv = (LPUNKNOWN) (LPMSGLIST) this;
else if (IsEqualIID(refiid,IID_IMsgList))
*ppv = (LPMSGLIST) this;
else if (IsEqualIID(refiid,IID_IMailFrame))
*ppv = (LPMAILFRAME) this;
if (*ppv != NULL) {
AddRef();
return NOERROR;
}
return ResultFromScode(E_NOINTERFACE);
}
STDMETHODIMP_(ULONG) CMsgListFrame::AddRef(void)
{
return ++m_ulRefCount;
}
STDMETHODIMP_(ULONG) CMsgListFrame::Release(void)
{
ULONG ulRef;
ulRef = --m_ulRefCount;
if (m_ulRefCount == 0)
delete this;
return ulRef;
}
CMsgListFrame::CMsgListFrame()
{
}
// IMsgList Interface
void CMsgListFrame::ListChangeStarting( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num)
{
if ( pane == m_pPane ) {
if ( m_pOutliner ) {
m_pOutliner->MysticStuffStarting( asynchronous, notify,
where, num );
}
} else {
ASSERT(0);
}
}
void CMsgListFrame::ListChangeFinished( MSG_Pane* pane, XP_Bool asynchronous,
MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
int32 num)
{
if ( pane == m_pPane ) {
if ( m_pOutliner ) {
m_pOutliner->MysticStuffFinishing( asynchronous, notify,
where, num );
}
} else {
ASSERT(0);
}
}
void CMsgListFrame::GetSelection( MSG_Pane* pane, MSG_ViewIndex **indices, int *count,
int *focus)
{
if ( pane == m_pPane ) {
if ( m_pOutliner ) {
m_pOutliner->GetSelection(*indices, *count);
*focus = m_pOutliner->GetFocusLine();
}
} else {
ASSERT(0);
}
}
void CMsgListFrame::SelectItem( MSG_Pane* pane, int item )
{
if ( pane == m_pPane ) {
if ( m_pOutliner ) {
m_pOutliner->SelectItem(item);
m_pOutliner->ScrollIntoView(item);
}
} else {
ASSERT(0);
}
}
void CMsgListFrame::CopyMessagesInto( MSG_Pane *pane, MSG_ViewIndex *indices, int count,
MSG_FolderInfo *folderInfo)
{
ASSERT(0);
}
void CMsgListFrame::MoveMessagesInto( MSG_Pane *pane, MSG_ViewIndex *indices, int count,
MSG_FolderInfo *folderInfo)
{
ASSERT(0);
}
BEGIN_MESSAGE_MAP( CMsgListFrame, CMailNewsFrame)
ON_WM_CREATE()
ON_WM_DESTROY()
END_MESSAGE_MAP()
int CMsgListFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
int res = CMailNewsFrame::OnCreate( lpCreateStruct );
return res;
}
void CMsgListFrame::OnDestroy()
{
// Destroy my own damn context
if(GetMainContext() && !GetMainContext()->IsDestroyed()) {
CAbstractCX *pCX = GetMainContext();
ClearContext(pCX);
pCX->DestroyContext();
}
CMailNewsFrame::OnDestroy();
}
BOOL WFE_MSGCheckWizard(CWnd *pParent)
{
return CMailNewsFrame::CheckWizard(pParent);
}