mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
757 lines
20 KiB
C++
757 lines
20 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.
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "prefapi.h"
|
|
#include "template.h"
|
|
#include "fldrfrm.h"
|
|
#include "thrdfrm.h"
|
|
#include "msgfrm.h"
|
|
#include "msgcom.h"
|
|
#include "wfemsg.h"
|
|
#include "mailpriv.h"
|
|
#include "prefs.h"
|
|
#include "dspppage.h"
|
|
|
|
#ifndef _AFXDLL
|
|
#undef new
|
|
#endif
|
|
IMPLEMENT_DYNCREATE(CFolderFrame, CMsgListFrame)
|
|
#ifndef _AFXDLL
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
CFolderFrame *g_pFolderFrame = NULL;
|
|
|
|
const UINT FolderCodes[] = {
|
|
ID_FILE_GETNEWMAIL,
|
|
ID_FILE_NEWMESSAGE,
|
|
ID_FILE_NEWFOLDER,
|
|
ID_FILE_SUBSCRIBE,
|
|
ID_NAVIGATE_INTERRUPT
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFolderFrame
|
|
|
|
CFolderFrame::CFolderFrame()
|
|
{
|
|
m_iMessageMenuPos = 2;
|
|
m_iMoveMenuPos = 3;
|
|
m_iCopyMenuPos = -1;
|
|
|
|
m_iFileMenuPos = -1;
|
|
m_iAttachMenuPos = -1;
|
|
}
|
|
|
|
void CFolderFrame::SelectFolder( MSG_FolderInfo *folderInfo )
|
|
{
|
|
ASSERT( m_pPane && m_pOutliner );
|
|
if ( m_pPane && m_pOutliner ) {
|
|
MSG_ViewIndex index = MSG_GetFolderIndexForInfo( m_pPane, folderInfo, TRUE );
|
|
if ( index != MSG_VIEWINDEXNONE ) {
|
|
m_pOutliner->SelectItem( CASTINT(index) );
|
|
}
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::PaneChanged( MSG_Pane *pane, XP_Bool asynchronous,
|
|
MSG_PANE_CHANGED_NOTIFY_CODE notify, int32 value)
|
|
{
|
|
if ( notify == MSG_PaneNotifySelectNewFolder ) {
|
|
if ( value >= 0 ) {
|
|
m_pOutliner->SelectItem( CASTINT(value) );
|
|
}
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::GetMessageString( UINT nID, CString& rMessage ) const
|
|
{
|
|
if (nID >= FIRST_MOVE_MENU_ID && nID <= LAST_MOVE_MENU_ID) {
|
|
rMessage.LoadString(IDS_STATUS_MOVEFOLDER);
|
|
} else {
|
|
CMsgListFrame::GetMessageString(nID, rMessage);
|
|
}
|
|
}
|
|
|
|
BOOL CFolderFrame::OnCreateClient( LPCREATESTRUCT lpcs, CCreateContext* pContext )
|
|
{
|
|
BOOL res = CMsgListFrame::OnCreateClient( lpcs, pContext );
|
|
if (res) {
|
|
CMailNewsCX *pCX;
|
|
|
|
pCX = new CMailNewsCX( MailCX, this );
|
|
|
|
SetMainContext(pCX);
|
|
SetActiveContext(pCX);
|
|
|
|
pCX->GetContext()->fancyFTP = TRUE;
|
|
pCX->GetContext()->fancyNews = TRUE;
|
|
pCX->GetContext()->intrupt = FALSE;
|
|
pCX->GetContext()->reSize = FALSE;
|
|
pCX->GetContext()->type = MWContextMail;
|
|
|
|
m_pMaster = WFE_MSGGetMaster();
|
|
m_pPane = MSG_CreateFolderPane( GetMainContext()->GetContext(), m_pMaster );
|
|
|
|
CFolderView *pView = (CFolderView *) GetDescendantWindow(AFX_IDW_PANE_FIRST, TRUE);
|
|
ASSERT(pView && pView->IsKindOf(RUNTIME_CLASS(CFolderView)));
|
|
|
|
m_pOutliner = (CMailNewsOutliner *) pView->m_pOutlinerParent->m_pOutliner;
|
|
pView->m_pOutlinerParent->CreateColumns ( );
|
|
m_pOutliner->SetPane(m_pPane);
|
|
|
|
MSG_SetFEData( m_pPane, (LPVOID) (LPUNKNOWN) (LPMSGLIST) this );
|
|
|
|
m_pOutliner->SelectItem(0);
|
|
}
|
|
return res;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP( CFolderFrame, CMsgListFrame )
|
|
ON_WM_SETFOCUS()
|
|
ON_WM_QUERYNEWPALETTE()
|
|
ON_WM_CREATE()
|
|
ON_WM_CLOSE()
|
|
ON_WM_DESTROY()
|
|
|
|
ON_COMMAND(ID_FILE_NEWFOLDER, OnNew)
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_NEWFOLDER, OnUpdateNew)
|
|
|
|
ON_COMMAND(ID_FILE_UPDATECOUNTS, OnUpdateView)
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_UPDATECOUNTS, OnUpdateUpdateView)
|
|
ON_COMMAND(ID_VIEW_PROPERTIES, OnViewProperties)
|
|
ON_UPDATE_COMMAND_UI(ID_VIEW_PROPERTIES, OnUpdateViewProperties)
|
|
// Organize Menu
|
|
#ifdef ON_COMMAND_RANGE
|
|
ON_COMMAND_RANGE(FIRST_MOVE_MENU_ID, LAST_MOVE_MENU_ID, OnMove )
|
|
ON_COMMAND_RANGE(FIRST_COPY_MENU_ID, LAST_COPY_MENU_ID, OnCopy )
|
|
#endif
|
|
ON_COMMAND(ID_FOLDER_SELECT, OnSelect)
|
|
|
|
ON_COMMAND(ID_FILE_OPENFOLDER, OnOpen )
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_OPENFOLDER, OnUpdateOpen )
|
|
ON_COMMAND(ID_FILE_OPENFOLDERNEW, OnOpenNew )
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_OPENFOLDERNEW, OnUpdateOpen )
|
|
ON_COMMAND(ID_FILE_OPENFOLDERREUSE, OnOpenReuse )
|
|
ON_UPDATE_COMMAND_UI(ID_FILE_OPENFOLDERREUSE, OnUpdateOpen )
|
|
|
|
ON_COMMAND(ID_HOTLIST_ADDCURRENTTOHOTLIST, OnFileBookmark)
|
|
ON_UPDATE_COMMAND_UI(ID_HOTLIST_ADDCURRENTTOHOTLIST, OnUpdateFileBookmark)
|
|
END_MESSAGE_MAP()
|
|
|
|
#ifndef ON_COMMAND_RANGE
|
|
|
|
BOOL CFolderFrame::OnCommand( WPARAM wParam, LPARAM lParam )
|
|
{
|
|
UINT nID = wParam;
|
|
|
|
if ( nID >= FIRST_MOVE_MENU_ID && nID <= LAST_MOVE_MENU_ID ) {
|
|
OnMove( nID );
|
|
return TRUE;
|
|
}
|
|
if ( nID >= FIRST_COPY_MENU_ID && nID <= LAST_COPY_MENU_ID ) {
|
|
OnCopy( nID );
|
|
return TRUE;
|
|
}
|
|
return CMailNewsFrame::OnCommand( wParam, lParam );
|
|
}
|
|
|
|
BOOL CFolderFrame::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
|
|
{
|
|
if (nCode == CN_UPDATE_COMMAND_UI) {
|
|
CCmdUI* pCmdUI = (CCmdUI*)pExtra;
|
|
if ( nID >= FIRST_MOVE_MENU_ID && nID <= LAST_MOVE_MENU_ID ) {
|
|
OnUpdateFile( pCmdUI );
|
|
return TRUE;
|
|
}
|
|
}
|
|
return CMsgListFrame::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
|
|
}
|
|
|
|
#endif
|
|
|
|
void CFolderFrame::OnSetFocus( CWnd *pWndOld )
|
|
{
|
|
CMsgListFrame::OnSetFocus( pWndOld );
|
|
if (m_pOutliner)
|
|
m_pOutliner->SetFocus();
|
|
}
|
|
|
|
int CFolderFrame::OnCreate( LPCREATESTRUCT lpCreateStruct )
|
|
{
|
|
int res = CMsgListFrame::OnCreate( lpCreateStruct );
|
|
|
|
if ( res != -1 ) {
|
|
// Set up toolbar
|
|
|
|
CString csFullString, cs;
|
|
csFullString.LoadString( IDR_MAILFRAME );
|
|
AfxExtractSubString( cs, csFullString, 0 );
|
|
m_pChrome->SetWindowTitle(cs);
|
|
|
|
//I'm hardcoding string since I don't want it translated.
|
|
m_pChrome->CreateCustomizableToolbar("Folders", 3, TRUE);
|
|
CButtonToolbarWindow *pWindow;
|
|
BOOL bOpen, bShowing;
|
|
|
|
int32 nPos;
|
|
|
|
//I'm hardcoding because I don't want this translated
|
|
m_pChrome->LoadToolbarConfiguration(ID_NAVIGATION_TOOLBAR, CString("Navigation_Toolbar"), nPos, bOpen, bShowing);
|
|
|
|
LPNSTOOLBAR pIToolBar;
|
|
m_pChrome->QueryInterface( IID_INSToolBar, (LPVOID *) &pIToolBar );
|
|
if ( pIToolBar ) {
|
|
pIToolBar->Create( this, WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE|CBRS_TOP );
|
|
pIToolBar->SetButtons( FolderCodes, sizeof(FolderCodes) / sizeof(UINT) );
|
|
pIToolBar->SetSizes( CSize( 29, 27 ), CSize( 23, 21 ) );
|
|
pIToolBar->LoadBitmap( MAKEINTRESOURCE( IDB_FOLDERTOOLBAR ) );
|
|
pIToolBar->SetToolbarStyle( theApp.m_pToolbarStyle );
|
|
pWindow = new CButtonToolbarWindow(CWnd::FromHandlePermanent(pIToolBar->GetHWnd()), theApp.m_pToolbarStyle, 43, 27, eLARGE_HTAB);
|
|
m_pChrome->GetCustomizableToolbar()->AddNewWindow(ID_NAVIGATION_TOOLBAR, pWindow,nPos, 50, 37, 0, CString(szLoadString(ID_NAVIGATION_TOOLBAR)),theApp.m_pToolbarStyle, bOpen, FALSE);
|
|
m_pChrome->ShowToolbar(ID_NAVIGATION_TOOLBAR, bShowing);
|
|
|
|
pIToolBar->Release();
|
|
}
|
|
|
|
m_pInfoBar = new CContainerInfoBar;
|
|
m_pInfoBar->Create(this, m_pPane);
|
|
|
|
//I'm hardcoding because I don't want this translated
|
|
m_pChrome->LoadToolbarConfiguration(ID_LOCATION_TOOLBAR, CString("Location_Toolbar"), nPos, bOpen, bShowing);
|
|
|
|
CToolbarWindow *pToolWindow = new CToolbarWindow(m_pInfoBar, theApp.m_pToolbarStyle, 27, 27, eSMALL_HTAB);
|
|
m_pChrome->GetCustomizableToolbar()->AddNewWindow(ID_LOCATION_TOOLBAR, pToolWindow,nPos, 27, 27, 0, CString(szLoadString(ID_LOCATION_TOOLBAR)),theApp.m_pToolbarStyle, bOpen, FALSE);
|
|
m_pChrome->ShowToolbar(ID_LOCATION_TOOLBAR, bShowing);
|
|
|
|
m_barStatus.Create(this, FALSE, TRUE);
|
|
|
|
LPNSSTATUSBAR pIStatusBar = NULL;
|
|
m_pChrome->QueryInterface( IID_INSStatusBar, (LPVOID *) &pIStatusBar );
|
|
if ( pIStatusBar ) {
|
|
pIStatusBar->Attach(&m_barStatus);
|
|
pIStatusBar->Release();
|
|
}
|
|
|
|
RecalcLayout();
|
|
|
|
((CMailNewsCX *) GetMainContext())->SetChrome( m_pChrome );
|
|
g_pFolderFrame = this;
|
|
|
|
m_pInfoBar->Update();
|
|
}
|
|
return res;
|
|
}
|
|
|
|
void CFolderFrame::OnClose()
|
|
{
|
|
int16 left, top, width, height;
|
|
int32 prefInt;
|
|
WINDOWPLACEMENT wp;
|
|
wp.length = sizeof(WINDOWPLACEMENT);
|
|
GetWindowPlacement(&wp);
|
|
CRect rect(wp.rcNormalPosition);
|
|
|
|
left = (int16) rect.left;
|
|
top = (int16) rect.top;
|
|
width = (int16) rect.Width();
|
|
height = (int16) rect.Height();
|
|
prefInt = wp.showCmd;
|
|
|
|
PREF_SetRectPref("mailnews.folder_window_rect", left, top, width, height);
|
|
PREF_SetIntPref("mailnews.folder_window_showwindow", prefInt);
|
|
|
|
//I'm hardcoding because I don't want this translated
|
|
m_pChrome->SaveToolbarConfiguration(ID_NAVIGATION_TOOLBAR, CString("Navigation_Toolbar"));
|
|
m_pChrome->SaveToolbarConfiguration(ID_LOCATION_TOOLBAR, CString("Location_Toolbar"));
|
|
|
|
CMsgListFrame::OnClose();
|
|
}
|
|
|
|
void CFolderFrame::OnDestroy()
|
|
{
|
|
CMsgListFrame::OnDestroy();
|
|
|
|
g_pFolderFrame = NULL;
|
|
}
|
|
|
|
LPCTSTR CFolderFrame::GetWindowMenuTitle()
|
|
{
|
|
return szLoadString(IDS_TITLE_COLLECTIONS);
|
|
}
|
|
|
|
CFolderFrame *CFolderFrame::Open()
|
|
{
|
|
if (!CheckWizard())
|
|
return NULL;
|
|
|
|
if (!g_pFolderFrame) {
|
|
g_MsgPrefs.m_pFolderTemplate->OpenDocumentFile(NULL);
|
|
}
|
|
|
|
if (g_pFolderFrame) {
|
|
g_pFolderFrame->ActivateFrame();
|
|
}
|
|
return g_pFolderFrame;
|
|
}
|
|
|
|
CFolderFrame *CFolderFrame::Open( MSG_FolderInfo *folderInfo)
|
|
{
|
|
Open();
|
|
if ( g_pFolderFrame ) {
|
|
g_pFolderFrame->SelectFolder( folderInfo );
|
|
}
|
|
return g_pFolderFrame;
|
|
}
|
|
|
|
CFolderFrame *CFolderFrame::OpenNews( )
|
|
{
|
|
MSG_FolderInfo *folderInfo = NULL;
|
|
MSG_GetFoldersWithFlag( WFE_MSGGetMaster(),
|
|
MSG_FOLDER_FLAG_NEWS_HOST,
|
|
&folderInfo, 1 );
|
|
|
|
CFolderFrame *pFrame = Open( folderInfo );
|
|
|
|
return pFrame;
|
|
}
|
|
|
|
void CFolderFrame::OnNew()
|
|
{
|
|
MSG_FolderInfo *folderInfo = GetCurFolder();
|
|
MSG_FolderLine folderLine;
|
|
folderLine.flags = 0;
|
|
if (folderInfo)
|
|
MSG_GetFolderLineById(WFE_MSGGetMaster(), folderInfo, &folderLine);
|
|
|
|
if (folderLine.flags & (MSG_FOLDER_FLAG_NEWSGROUP|MSG_FOLDER_FLAG_NEWS_HOST)) {
|
|
OnNewNewsgroup();
|
|
} else {
|
|
CNewFolderDialog( this, m_pPane, GetCurFolder() );
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateNew(CCmdUI *pCmdUI)
|
|
{
|
|
MSG_FolderInfo *folderInfo = GetCurFolder();
|
|
MSG_FolderLine folderLine;
|
|
folderLine.flags = 0;
|
|
if (folderInfo)
|
|
MSG_GetFolderLineById(WFE_MSGGetMaster(), folderInfo, &folderLine);
|
|
|
|
if (folderLine.flags & (MSG_FOLDER_FLAG_NEWSGROUP|MSG_FOLDER_FLAG_NEWS_HOST)) {
|
|
pCmdUI->SetText(szLoadString(IDS_MENU_NEWNEWSGROUP));
|
|
OnUpdateNewNewsgroup(pCmdUI);
|
|
} else {
|
|
pCmdUI->SetText(szLoadString(IDS_MENU_NEWFOLDER));
|
|
pCmdUI->Enable( TRUE );
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateView()
|
|
{
|
|
DoCommand(MSG_UpdateMessageCount);
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateUpdateView( CCmdUI *pCmdUI )
|
|
{
|
|
DoUpdateCommand(pCmdUI, MSG_UpdateMessageCount);
|
|
}
|
|
|
|
void _ShutDownFrameCallBack(HWND hwnd, MSG_Pane *pane, void * closure)
|
|
{
|
|
if (::IsWindow(hwnd)) {
|
|
::ShowWindow(hwnd,SW_SHOW);
|
|
::UpdateWindow(hwnd);
|
|
}
|
|
|
|
if (pane)
|
|
MSG_DownloadFolderForOffline(WFE_MSGGetMaster(), pane, (MSG_FolderInfo *) closure);
|
|
}
|
|
|
|
|
|
void CFolderFrame::OnViewProperties()
|
|
{
|
|
MSG_ViewIndex *indices;
|
|
int count;
|
|
BOOL bNoPropertiesNeeded = FALSE;
|
|
MSG_FolderLine folderLine;
|
|
|
|
m_pOutliner->GetSelection( indices, count );
|
|
MSG_FolderInfo *folderInfo = MSG_GetFolderInfo( m_pPane, indices[0] );
|
|
MSG_GetFolderLineByIndex( m_pPane, indices[0], 1, &folderLine );
|
|
|
|
CString csTitle;
|
|
if (folderLine.flags & (MSG_FOLDER_FLAG_NEWSGROUP|MSG_FOLDER_FLAG_CATEGORY)) {
|
|
csTitle.LoadString(IDS_NEWSGROUPPROP);
|
|
} else if (folderLine.flags & MSG_FOLDER_FLAG_NEWS_HOST) {
|
|
csTitle.LoadString(IDS_NEWSHOSTPROP);
|
|
} else {
|
|
if (folderLine.level > 1) {
|
|
csTitle.LoadString(IDS_FOLDERPROP);
|
|
}else {
|
|
csTitle.LoadString(IDS_MAILSERVERPROP);
|
|
}
|
|
}
|
|
CNewsFolderPropertySheet FolderSheet( csTitle, this );
|
|
|
|
//destructor handles clean up of added sheets
|
|
|
|
//only make and add the pages if they selected a news group or category
|
|
if ( folderLine.flags & (MSG_FOLDER_FLAG_NEWSGROUP|MSG_FOLDER_FLAG_CATEGORY) )
|
|
{
|
|
FolderSheet.m_pNewsFolderPage= new CNewsGeneralPropertyPage(&FolderSheet);
|
|
FolderSheet.m_pNewsFolderPage->SetFolderInfo( folderInfo, (MWContext*)GetContext() );
|
|
|
|
FolderSheet.m_pDownLoadPageNews = new CDownLoadPPNews(&FolderSheet);
|
|
FolderSheet.m_pDownLoadPageNews->SetFolderInfo(folderInfo);
|
|
|
|
FolderSheet.m_pDiskSpacePage = new CDiskSpacePropertyPage(&FolderSheet);
|
|
FolderSheet.m_pDiskSpacePage->SetFolderInfo (folderInfo );
|
|
|
|
FolderSheet.AddPage(FolderSheet.m_pNewsFolderPage);
|
|
FolderSheet.AddPage(FolderSheet.m_pDownLoadPageNews);
|
|
FolderSheet.AddPage(FolderSheet.m_pDiskSpacePage);
|
|
}
|
|
else if ( folderLine.flags & MSG_FOLDER_FLAG_NEWS_HOST)
|
|
{
|
|
MSG_NewsHost *pNewsHost = MSG_GetNewsHostFromIndex (m_pPane, indices[0]);
|
|
FolderSheet.m_pNewsHostPage= new CNewsHostGeneralPropertyPage;
|
|
FolderSheet.m_pNewsHostPage->SetFolderInfo( folderInfo,pNewsHost );
|
|
FolderSheet.AddPage(FolderSheet.m_pNewsHostPage);
|
|
}
|
|
else if ( folderLine.level > 1)
|
|
{
|
|
FolderSheet.m_pFolderPage= new CFolderPropertyPage(&FolderSheet);
|
|
FolderSheet.m_pFolderPage->SetFolderInfo( folderInfo, m_pPane );
|
|
FolderSheet.AddPage(FolderSheet.m_pFolderPage);
|
|
//only add this page if it's an offline mail folder.
|
|
if (folderLine.flags & MSG_FOLDER_FLAG_IMAPBOX)
|
|
{
|
|
FolderSheet.m_pDownLoadPageMail = new CDownLoadPPMail;
|
|
FolderSheet.m_pDownLoadPageMail->SetFolderInfo( folderInfo );
|
|
FolderSheet.AddPage(FolderSheet.m_pDownLoadPageMail);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wfe_DisplayPreferences((CGenericFrame*)this);
|
|
bNoPropertiesNeeded = TRUE;
|
|
}
|
|
|
|
if ( !bNoPropertiesNeeded)
|
|
{
|
|
if(FolderSheet.DoModal() == IDOK)
|
|
{
|
|
if(FolderSheet.DownLoadNow())
|
|
{
|
|
new CProgressDialog(this, NULL,_ShutDownFrameCallBack,
|
|
folderInfo,szLoadString(IDS_DOWNLOADINGARTICLES));
|
|
;//DonwLoad!!!!!!!
|
|
}
|
|
else if (FolderSheet.CleanUpNow())
|
|
{
|
|
MSG_Command (m_pPane, MSG_CompressFolder,
|
|
indices, 1);
|
|
}
|
|
else if (FolderSheet.SynchronizeNow())
|
|
;//Synchronize!!!!
|
|
}
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateViewProperties( CCmdUI *pCmdUI )
|
|
{
|
|
MSG_ViewIndex *indices;
|
|
int count;
|
|
|
|
m_pOutliner->GetSelection( indices, count );
|
|
|
|
MSG_FolderLine folderLine;
|
|
|
|
MSG_FolderInfo *folderInfo = MSG_GetFolderInfo( m_pPane, indices[0] );
|
|
MSG_GetFolderLineByIndex( m_pPane, indices[0], 1, &folderLine );
|
|
|
|
CString csTitle;
|
|
if (folderLine.flags & (MSG_FOLDER_FLAG_NEWSGROUP|MSG_FOLDER_FLAG_CATEGORY)) {
|
|
pCmdUI->SetText(szLoadString(IDS_POPUP_NEWSGROUPPROP));
|
|
} else if (folderLine.flags & MSG_FOLDER_FLAG_NEWS_HOST) {
|
|
pCmdUI->SetText(szLoadString(IDS_POPUP_NEWSHOSTPROP));
|
|
} else {
|
|
if (folderLine.level > 1) {
|
|
pCmdUI->SetText(szLoadString(IDS_POPUP_FOLDERPROP));
|
|
}else {
|
|
pCmdUI->SetText(szLoadString(IDS_POPUP_MAILSERVERPROP));
|
|
}
|
|
}
|
|
|
|
pCmdUI->Enable( count == 1 );
|
|
}
|
|
|
|
void CFolderFrame::OnMove(UINT nID)
|
|
{
|
|
if ( m_pPane ) {
|
|
MSG_FolderInfo *folderInfo = FolderInfoFromMenuID( nID );
|
|
|
|
ASSERT(folderInfo);
|
|
if (folderInfo) {
|
|
MSG_ViewIndex *indices;
|
|
int count;
|
|
m_pOutliner->GetSelection( indices, count );
|
|
|
|
MSG_MoveFoldersInto( m_pPane, indices, count, folderInfo);
|
|
ModalStatusBegin( MODAL_DELAY );
|
|
}
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::OnCopy(UINT nID)
|
|
{
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateFile(CCmdUI *pCmdUI)
|
|
{
|
|
pCmdUI->Enable(TRUE); // WHS folders only
|
|
}
|
|
|
|
void CFolderFrame::OnSelect()
|
|
{
|
|
}
|
|
|
|
MSG_FolderInfo *CFolderFrame::GetCurFolder() const
|
|
{
|
|
MSG_FolderInfo *res = NULL;
|
|
MSG_ViewIndex *indices;
|
|
int count;
|
|
m_pOutliner->GetSelection( indices, count );
|
|
|
|
if ( count == 1 ) {
|
|
res = MSG_GetFolderInfo( m_pPane, indices[0] );
|
|
}
|
|
return res;
|
|
}
|
|
|
|
MSG_FolderInfo *CFolderFrame::FindFolder( LPCSTR lpszName, MSG_FolderInfo *root )
|
|
{
|
|
MSG_Master *pMaster = WFE_MSGGetMaster();
|
|
MSG_FolderInfo *res = NULL;
|
|
MSG_FolderInfo **apFolderInfo = NULL;
|
|
int i;
|
|
int iLines = CASTINT(MSG_GetFolderChildren ( pMaster, root, NULL, 0));
|
|
|
|
apFolderInfo = new MSG_FolderInfo*[iLines];
|
|
ASSERT(apFolderInfo);
|
|
|
|
if ( apFolderInfo ) {
|
|
MSG_GetFolderChildren ( pMaster, root, apFolderInfo, iLines );
|
|
for ( i = 0; i < iLines && !res; i++ ) {
|
|
MSG_FolderLine folderLine;
|
|
MSG_GetFolderLineById( pMaster, apFolderInfo[i], &folderLine );
|
|
|
|
if ( !stricmp( folderLine.name, lpszName ) ||
|
|
(folderLine.prettyName && !strcmp( folderLine.prettyName, lpszName )) ) {
|
|
res = apFolderInfo[i];
|
|
} else if ( folderLine.numChildren > 0 ) {
|
|
res = FindFolder( lpszName, apFolderInfo[i] );
|
|
}
|
|
}
|
|
}
|
|
delete [] apFolderInfo;
|
|
|
|
return res;
|
|
}
|
|
|
|
void CFolderFrame::DoOpenFolder(BOOL bReuse)
|
|
{
|
|
MSG_ViewIndex *indices;
|
|
int i, count;
|
|
|
|
m_pOutliner->GetSelection(indices, count);
|
|
for ( i = 0; i < count; i++ )
|
|
{
|
|
MSG_FolderLine folderLine;
|
|
if ( MSG_GetFolderLineByIndex(m_pPane, indices[i], 1, &folderLine) )
|
|
{
|
|
C3PaneMailFrame *pFrame = C3PaneMailFrame::FindFrame( folderLine.id );
|
|
|
|
if ( !pFrame )
|
|
{
|
|
if ( (i > 0) || !bReuse || !(pFrame = GetLastThreadFrame()) )
|
|
{
|
|
pFrame = C3PaneMailFrame::Open(folderLine.id);
|
|
}
|
|
}
|
|
|
|
if (pFrame)
|
|
pFrame->ActivateFrame();
|
|
}
|
|
}
|
|
}
|
|
|
|
void CFolderFrame::OnOpen( )
|
|
{
|
|
if (!m_pOutliner)
|
|
return;
|
|
|
|
BOOL bReuse = g_MsgPrefs.m_bThreadReuse;
|
|
if (GetKeyState(VK_MENU) & 0x8000)
|
|
bReuse = !bReuse;
|
|
|
|
DoOpenFolder(bReuse);
|
|
}
|
|
|
|
void CFolderFrame::OnOpenNew( )
|
|
{
|
|
DoOpenFolder(FALSE);
|
|
}
|
|
|
|
void CFolderFrame::OnOpenReuse( )
|
|
{
|
|
DoOpenFolder(TRUE);
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateOpen( CCmdUI *pCmdUI )
|
|
{
|
|
MSG_ViewIndex *indices;
|
|
int count;
|
|
|
|
m_pOutliner->GetSelection( indices, count );
|
|
|
|
if (pCmdUI->m_nID == ID_FILE_OPENFOLDER) {
|
|
CString cs;
|
|
if (count == 1) {
|
|
MSG_FolderLine folderLine;
|
|
if ( MSG_GetFolderLineByIndex(m_pPane, indices[0], 1, &folderLine) ) {
|
|
if (folderLine.flags & MSG_FOLDER_FLAG_MAIL) {
|
|
cs.LoadString(IDS_POPUP_OPENFOLDER);
|
|
} else {
|
|
cs.LoadString(IDS_POPUP_OPENNEWSGROUP);
|
|
}
|
|
}
|
|
}
|
|
if (cs.IsEmpty()) {
|
|
cs.LoadString(IDS_POPUP_OPENSELECTION);
|
|
}
|
|
cs += szLoadString(IDS_OPENACCEL);
|
|
pCmdUI->SetText(cs);
|
|
}
|
|
|
|
BOOL bEnable = count > 0;
|
|
for (int i = 0; i < count; i++) {
|
|
MSG_FolderLine folderLine;
|
|
if ( MSG_GetFolderLineByIndex(m_pPane, indices[0], 1, &folderLine) ) {
|
|
if (folderLine.level < 2)
|
|
bEnable = FALSE;
|
|
} else {
|
|
bEnable = FALSE;
|
|
}
|
|
}
|
|
pCmdUI->Enable( bEnable );
|
|
}
|
|
|
|
#define WFE_PREF_BITS 0x40000002
|
|
#define WFE_PREF_DEFAULT 0x00000000
|
|
|
|
void CFolderFrame::SetFolderPref( MSG_FolderInfo *folderInfo, uint32 flag )
|
|
{
|
|
uint32 flags = MSG_GetFolderPrefFlags( folderInfo );
|
|
if ( !(flags & MSG_FOLDER_PREF_FEVALID) ) {
|
|
flags |= WFE_PREF_DEFAULT|MSG_FOLDER_PREF_FEVALID;
|
|
}
|
|
flags |= flag;
|
|
MSG_SetFolderPrefFlags( folderInfo, flags );
|
|
}
|
|
|
|
void CFolderFrame::ClearFolderPref( MSG_FolderInfo *folderInfo, uint32 flag )
|
|
{
|
|
uint32 flags = MSG_GetFolderPrefFlags( folderInfo );
|
|
if ( !(flags & MSG_FOLDER_PREF_FEVALID) ) {
|
|
flags |= WFE_PREF_DEFAULT|MSG_FOLDER_PREF_FEVALID;
|
|
}
|
|
flags &= ~flag;
|
|
MSG_SetFolderPrefFlags( folderInfo, flags );
|
|
}
|
|
|
|
BOOL CFolderFrame::IsFolderPrefSet( MSG_FolderInfo *folderInfo, uint32 flag )
|
|
{
|
|
uint32 flags = MSG_GetFolderPrefFlags( folderInfo );
|
|
if ( !(flags & MSG_FOLDER_PREF_FEVALID ) ) {
|
|
flags |= WFE_PREF_DEFAULT;
|
|
}
|
|
return (flags & flag) ? TRUE : FALSE;
|
|
}
|
|
|
|
void CFolderFrame::OnFileBookmark()
|
|
{
|
|
FileBookmark();
|
|
}
|
|
|
|
void CFolderFrame::OnUpdateFileBookmark(CCmdUI* pCmdUI)
|
|
{
|
|
pCmdUI->Enable(TRUE);
|
|
}
|
|
|
|
BOOL CFolderFrame::FileBookmark()
|
|
{
|
|
BOOL res = FALSE;
|
|
MSG_ViewIndex *indices;
|
|
int count;
|
|
m_pOutliner->GetSelection(indices, count);
|
|
|
|
if (count < 1) {
|
|
HT_AddBookmark("mailbox:", (char*)(szLoadString(IDS_TITLE_COLLECTIONS)));
|
|
// Updated to Aurora (Dave H.)
|
|
res = TRUE;
|
|
} else {
|
|
// Add bookmark to each selected folder
|
|
MSG_FolderLine folderLine;
|
|
for (int i = 0; i < count; i++) {
|
|
if (MSG_GetFolderLineByIndex(m_pPane, indices[i], 1, &folderLine)) {
|
|
URL_Struct *url = MSG_ConstructUrlForFolder( m_pPane, folderLine.id );
|
|
|
|
if ( url ) {
|
|
const char *name = (folderLine.prettyName && folderLine.prettyName[0]) ?
|
|
folderLine.prettyName : folderLine.name;
|
|
|
|
HT_AddBookmark(url->address, (char*)name); // updated to Aurora (Dave H.)
|
|
NET_FreeURLStruct( url );
|
|
res = TRUE;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|
|
|
|
CFolderFrame *WFE_MSGOpenFolders()
|
|
{
|
|
return CFolderFrame::Open();
|
|
}
|
|
|
|
CFolderFrame *WFE_MSGOpenNews()
|
|
{
|
|
return CFolderFrame::OpenNews();
|
|
}
|