gecko-dev/cmd/winfe/offlndlg.cpp

589 строки
14 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 "mailpriv.h"
#include "wfemsg.h"
#include "prefapi.h"
#include "nethelp.h"
#include "xp_help.h"
#include "offpkdlg.h"
#include "offlndlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// COfflineInfo
// Note bGoOffline is true if we need to go offline, false if we need
// to go online
// bChangeState is TRUE if the bGoOffline parameter is to be used,
// FALSE if it will be ignored.
COfflineInfo::COfflineInfo(BOOL bDownloadMail, BOOL bDownloadNews,
BOOL bDownloadDirectories,
BOOL bSendMail, BOOL bDownloadFlagged,
BOOL bGoOffline, BOOL bChangeState)
{
m_bDownloadMail = bDownloadMail;
m_bDownloadNews = bDownloadNews;
m_bDownloadDirectories = bDownloadDirectories;
m_bSendMail = bSendMail;
m_bDownloadFlagged = bDownloadFlagged;
m_bGoOffline = bGoOffline;
m_bChangeState = bChangeState;
}
BOOL COfflineInfo::DownloadMail()
{
return m_bDownloadMail;
}
BOOL COfflineInfo::DownloadNews()
{
return m_bDownloadNews;
}
BOOL COfflineInfo::DownloadDirectories()
{
return m_bDownloadDirectories;
}
BOOL COfflineInfo::SendMail()
{
return m_bSendMail;
}
BOOL COfflineInfo::DownloadFlagged()
{
return m_bDownloadFlagged;
}
BOOL COfflineInfo::GoOffline()
{
return m_bGoOffline;
}
BOOL COfflineInfo::ChangeState()
{
return m_bChangeState;
}
/////////////////////////////////////////////////////////////////////////////
// COfflineDlg dialog
COfflineDlg::COfflineDlg(CWnd* pParent /*=NULL*/)
: CDialog(COfflineDlg::IDD, pParent)
{
XP_Bool bDiscussions = 0;
XP_Bool bMail = 0;
XP_Bool bMessages = 0;
XP_Bool bDirectories = 0;
XP_Bool bFlagged = 0;
XP_Bool bGoOffline = 0;
PREF_GetBoolPref("offline.download_discussions",&bDiscussions);
PREF_GetBoolPref("offline.download_mail",&bMail);
PREF_GetBoolPref("offline.download_messages",&bMessages);
PREF_GetBoolPref("offline.download_directories",&bDirectories);
// PREF_GetBoolPref("offline.download_flagged", &bFlagged);
PREF_GetBoolPref("offline.download_gooffline",&bGoOffline);
m_bDownLoadDiscussions = bDiscussions;
m_bDownLoadMail = bMail;
m_bSendMessages = bMessages;
m_bDownLoadDirectories = bDirectories;
// m_bDownLoadFlagged = bFlagged;
m_bGoOffline = bGoOffline;
m_bMode = NET_IsOffline();
}
void COfflineDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_DWNLD_CHECK_MAIL, m_bDownLoadMail);
DDX_Check(pDX, IDC_DWNLD_CHECK_DISCUSSIONS, m_bDownLoadDiscussions);
DDX_Check(pDX, IDC_DWNLD_CHECK_DIRECTORIES, m_bDownLoadDirectories);
DDX_Check(pDX, IDC_DWNLD_CHECK_SENDMAIL, m_bSendMessages);
// DDX_Check(pDX, IDC_DOWNLOADFLAGGED, m_bDownLoadFlagged);
DDX_Check(pDX, IDC_DWNLD_CHECK_GO_OFFLINE, m_bGoOffline);
}
BEGIN_MESSAGE_MAP(COfflineDlg, CDialog)
//{{AFX_MSG_MAP(COfflineDlg)
ON_BN_CLICKED(IDC_DWNLD_BUTTON_SELECT, OnButtonSelect)
ON_BN_CLICKED(IDC_DWNLD_HELP_GO_OFFLINE, OnHelp)
ON_WM_PAINT()
ON_WM_DESTROY()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COfflineDlg message handlers
void COfflineDlg::OnButtonSelect()
{
CDlgOfflinePicker OfflinePickerDlg(this);
OfflinePickerDlg.DoModal();
/*
CDlgSelectGroups dlgSelectGroups(this);
dlgSelectGroups.DoModal();
CWnd *pWnd = GetDlgItem(IDC_TEXT_DISCUSSIONS_SELECTED);
CString strCountText;
CString strTemp;
if (pWnd)
{
strTemp.LoadString(IDS_TEXT_DISCUSSIONS_SELECTED);
char buf[20];
strCountText = itoa(dlgSelectGroups.GetSelectionCount(),buf,10) + (CString)" "+ strTemp;
pWnd->SetWindowText(strCountText);
}
pWnd = GetDlgItem(IDC_TEXT_FOLDERS_SELECTED);
if (pWnd)
{
strTemp.LoadString(IDS_TEXT_FOLDERS_SELECTED);
char buf[20];
strCountText = itoa(dlgSelectGroups.GetMailSelectionCount(),buf,10) + (CString)" "+ strTemp;
pWnd->SetWindowText(strCountText);
}
*/
}
void COfflineDlg::ShutDownFrameCallBack(HWND hwnd, MSG_Pane *pane, void * closure)
{
if (::IsWindow(hwnd)) {
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
}
if (pane)
{
COfflineInfo *info = (COfflineInfo *) closure;
BOOL bGoOffline = info->ChangeState() && info->GoOffline();
MSG_SynchronizeOffline(WFE_MSGGetMaster(), pane, info->DownloadNews(),
info->DownloadMail(), info->SendMail(), info->DownloadDirectories(),
bGoOffline);
}
}
BOOL COfflineDlg::ShowOnlineCallBack(HWND hWnd, MSG_Pane *pane, void * closure)
{
BOOL bSendMail = FALSE;
if (pane)
{
COfflineInfo *info = (COfflineInfo *) closure;
bSendMail = info->SendMail();
//handle going online:
if(info->ChangeState() && !info->GoOffline())
{
XP_Bool bSelectable;
MSG_COMMAND_CHECK_STATE selected;
const char * pString;
XP_Bool bPlural;
MSG_CommandStatus (pane,MSG_DeliverQueuedMessages,
NULL, 0,&bSelectable, &selected, &pString,
&bPlural);
int32 prefInt;
PREF_GetIntPref("offline.send.unsent_messages", &prefInt);
//check for unsent messages.
if(prefInt == 0)
{
bSendMail = FALSE;
if(bSelectable)
{
int result = ::MessageBox(hWnd, ::szLoadString(IDS_SENDONLINE),
::szLoadString(IDS_GOONLINE),
MB_YESNO | MB_APPLMODAL);
bSendMail = (result == IDYES);
}
}
else if (prefInt == 1)
{
//if there's mail send it otherwise don't.
bSendMail = bSelectable;
}
else
{
bSendMail = FALSE;
}
}
}
//if bSendMail is true we want to bring up a progress pane
return bSendMail;
}
void WFE_Synchronize(CWnd *pParent, BOOL bExitAfterSynchronizing)
{
if(bExitAfterSynchronizing)
{
theApp.HideFrames();
}
BOOL bOnline;
COfflineDlg rDlg(pParent);
PREF_GetBoolPref("network.online", &bOnline);
rDlg.InitDialog(!bOnline);
int result = rDlg.DoModal();
if(result == IDOK && rDlg.DownloadItems())
{
//note we only change state if we go offline.
COfflineInfo info(rDlg.m_bDownLoadMail, rDlg.m_bDownLoadDiscussions,
rDlg.m_bDownLoadDirectories,
rDlg.m_bSendMessages, FALSE,
rDlg.m_bGoOffline, rDlg.m_bGoOffline);
theApp.m_bSynchronizing = TRUE;
new COfflineProgressDialog(pParent, NULL,COfflineDlg::ShutDownFrameCallBack,
&info,szLoadString(IDS_SYNCHRONIZING), NULL, bExitAfterSynchronizing);
}
else
{
if(bExitAfterSynchronizing)
{
theApp.CommonAppExit();
}
}
}
/* rhp - This is for doing MAPI Synchronizing... */
void
WFE_MAPISynchronize(CWnd *pParent)
{
BOOL bOnline;
COfflineDlg rDlg(pParent);
PREF_GetBoolPref("network.online", &bOnline);
rDlg.InitDialog(!bOnline);
// int result = rDlg.DoModal(); - no need for showing dialog...
// we only change state if we go offline.
COfflineInfo info(rDlg.m_bDownLoadMail, rDlg.m_bDownLoadDiscussions,
rDlg.m_bDownLoadDirectories,
rDlg.m_bSendMessages, FALSE,
rDlg.m_bGoOffline, rDlg.m_bGoOffline);
theApp.m_bSynchronizing = TRUE;
new COfflineProgressDialog(pParent, NULL,COfflineDlg::ShutDownFrameCallBack,
&info,szLoadString(IDS_SYNCHRONIZING), NULL, FALSE);
}
/*
* Return if there are items to download based on this dialog's current settings
*/
BOOL COfflineDlg::DownloadItems()
{
return((m_bDownLoadDiscussions || m_bDownLoadMail || m_bSendMessages ||
m_bDownLoadDirectories ));
}
void COfflineDlg::OnOK()
{
// TODO: Add extra validation here
UpdateData();
/* if ((m_bDownLoadDiscussions || m_bDownLoadMail || m_bSendMessages ||
m_bDownLoadDirectories ))
{
new CProgressDialog(this, NULL,ShutDownFrameCallBack,
this,szLoadString(IDS_DOWNLOADINGARTICLES)); // need correct window title
;//DownLoad!!!!!!!
}
else
{
PREF_SetBoolPref("network.online", m_bMode);
}
*/
if (!m_bDownLoadDiscussions && !m_bDownLoadMail && !m_bDownLoadDirectories && !m_bSendMessages)
PREF_SetBoolPref("network.online", !m_bGoOffline);
PREF_SetBoolPref("offline.download_discussions",(XP_Bool)m_bDownLoadDiscussions);
PREF_SetBoolPref("offline.download_mail",(XP_Bool)m_bDownLoadMail);
PREF_SetBoolPref("offline.download_directories",(XP_Bool)m_bDownLoadDirectories);
PREF_SetBoolPref("offline.download_messages",(XP_Bool)m_bSendMessages);
// PREF_SetBoolPref("offline.download_flagged", (XP_Bool)m_bDownLoadFlagged);
CDialog::OnOK();
}
void COfflineDlg::OnHelp()
{
NetHelp(HELP_MAILNEWS_SYNCHRONIZE);
}
int COfflineDlg::DoModal()
{
if (!m_MNResourceSwitcher.Initialize())
return -1;
return CDialog::DoModal();
}
BOOL COfflineDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_MNResourceSwitcher.Reset();
CWnd *pWnd1 = GetDlgItem(IDC_DWNLD_STATIC_MGD);
if (!pWnd1 )
return FALSE;
HFONT hFont = (HFONT)this->SendMessage(WM_GETFONT);
if (hFont != NULL)
{ //make the title bold
VERIFY(::GetObject(hFont, sizeof(LOGFONT), &m_LogFont));
m_LogFont.lfWeight=FW_BOLD;
m_Font.CreateFontIndirect(&m_LogFont);
pWnd1->SetFont(&m_Font);
}
return TRUE; // return TRUE unless you set the focus to a control
}
void COfflineDlg::OnDestroy( )
{
int i = 0;
}
///////////////////////////////////////////////////////////////////////
////CGoOfflineAndSynchDlg
CGoOfflineAndSynchDlg::CGoOfflineAndSynchDlg(CWnd* pParent /*=NULL*/)
: CDialog(CGoOfflineAndSynchDlg::IDD, pParent)
{
XP_Bool bDiscussions = 0;
XP_Bool bMail = 0;
XP_Bool bMessages = 0;
#ifdef WIN32
XP_Bool bPages = 0;
XP_Bool bChannels = 0;
#endif
XP_Bool bDirectories = 0;
XP_Bool bGoOffline = 0;
PREF_GetBoolPref("offline.download_discussions",&bDiscussions);
PREF_GetBoolPref("offline.download_mail",&bMail);
PREF_GetBoolPref("offline.download_messages",&bMessages);
#ifdef WIN32
PREF_GetBoolPref("offline.download_pages",&bPages);
PREF_GetBoolPref("offline.download_channels",&bChannels);
#endif
PREF_GetBoolPref("offline.download_directories",&bDirectories);
PREF_GetBoolPref("offline.download_gooffline",&bGoOffline);
m_bDownLoadDiscussions = bDiscussions;
m_bDownLoadMail = bMail;
m_bSendMessages = bMessages;
#ifdef WIN32
m_bDownLoadPages = bPages;
m_bDownLoadChannels = bChannels;
#endif
m_bDownLoadDirectories = bDirectories;
m_bGoOffline = bGoOffline;
m_bMode = NET_IsOffline();//get offline mode
}
BEGIN_MESSAGE_MAP(CGoOfflineAndSynchDlg, CDialog)
//{{AFX_MSG_MAP(CGoOfflineAndSynchDlg)
ON_BN_CLICKED(IDCANCEL, OnCancel)
ON_BN_CLICKED(IDC_HELP_DOWNLOAD, OnHelp)
ON_BN_CLICKED(IDC_BUTTON_NO, OnNo)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// COfflineDlg message handlers
void CGoOfflineAndSynchDlg::OnCancel()
{
CDialog::OnCancel();
}
void CGoOfflineAndSynchDlg::OnNo()
{
PREF_SetBoolPref("network.online", m_bMode);
CDialog::OnOK();
}
void CGoOfflineAndSynchDlg::ShutDownFrameCallBack(HWND hwnd, MSG_Pane *pane, void * closure)
{
if (::IsWindow(hwnd)) {
::ShowWindow(hwnd,SW_SHOW);
::UpdateWindow(hwnd);
}
if (pane)
{
CGoOfflineAndSynchDlg *SynchronizeDlg = (CGoOfflineAndSynchDlg *) closure;
MSG_GoOffline(WFE_MSGGetMaster(), pane, SynchronizeDlg->m_bDownLoadDiscussions, SynchronizeDlg->m_bDownLoadMail,
SynchronizeDlg->m_bSendMessages, FALSE /*getDirectories*/);
}
}
void CGoOfflineAndSynchDlg::OnOK()
{
// TODO: Add extra validation here
#ifdef WIN32
if ((m_bDownLoadDiscussions || m_bDownLoadMail || m_bSendMessages ||
m_bDownLoadDirectories || m_bDownLoadPages || m_bDownLoadChannels))
#else
if ((m_bDownLoadDiscussions || m_bDownLoadMail || m_bSendMessages ||
m_bDownLoadDirectories ))
#endif
{
new CProgressDialog(this, NULL,ShutDownFrameCallBack,
this,szLoadString(IDS_DOWNLOADINGARTICLES)); // need correct window title
;//DownLoad!!!!!!!
// somehow we need to wait until downloading is done.
}
else
{
PREF_SetBoolPref("network.online", m_bMode);
}
PREF_SetBoolPref("offline.download_discussions",(XP_Bool)m_bDownLoadDiscussions);
PREF_SetBoolPref("offline.download_mail",(XP_Bool)m_bDownLoadMail);
PREF_SetBoolPref("offline.download_directories",(XP_Bool)m_bDownLoadDirectories);
PREF_SetBoolPref("offline.download_messages",(XP_Bool)m_bSendMessages);
CDialog::OnOK();
}
void CGoOfflineAndSynchDlg::OnHelp()
{
NetHelp(HELP_OFFLINE_DOWNLOAD);
}
int CGoOfflineAndSynchDlg::DoModal()
{
if (!m_MNResourceSwitcher.Initialize())
return -1;
return CDialog::DoModal();
}
BOOL CGoOfflineAndSynchDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_MNResourceSwitcher.Reset();
CWnd *pWnd1 = GetDlgItem(IDC_STATIC_SYNC_QUESTION);
if (!pWnd1)
return FALSE;
HFONT hFont = (HFONT)this->SendMessage(WM_GETFONT);
if (hFont != NULL)
{ //make the title bold
VERIFY(::GetObject(hFont, sizeof(LOGFONT), &m_LogFont));
m_LogFont.lfWeight=FW_BOLD;
m_Font.CreateFontIndirect(&m_LogFont);
pWnd1->SetFont(&m_Font);
}
return TRUE; // return TRUE unless you set the focus to a control
}
/////////////////////////////////////////////////////////////////////////////
// CAskSynchronizeExitDlg dialog
CAskSynchronizeExitDlg::CAskSynchronizeExitDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAskSynchronizeExitDlg::IDD, pParent)
{
}
void CAskSynchronizeExitDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Check(pDX, IDC_DONTASKAGAIN, m_bDontAskAgain);
}
BEGIN_MESSAGE_MAP(CAskSynchronizeExitDlg, CDialog)
//{{AFX_MSG_MAP(CAskSynchronizeExitDlg)
ON_BN_CLICKED(IDYES, OnYes)
ON_BN_CLICKED(IDNO, OnNo)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAskSynchronizeExitDlg message handlers
void CAskSynchronizeExitDlg::OnYes()
{
CommonClose();
EndDialog(IDYES);
}
void CAskSynchronizeExitDlg::OnNo()
{
CommonClose();
EndDialog(IDNO);
}
void CAskSynchronizeExitDlg::CommonClose()
{
// TODO: Add extra validation here
UpdateData();
if(m_bDontAskAgain)
{
PREF_SetBoolPref("offline.prompt_synch_on_exit",(XP_Bool)!m_bDontAskAgain);
}
}