mirror of https://github.com/roytam1/kmeleon.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
251 lines
6.8 KiB
251 lines
6.8 KiB
// PrintProgressDialog.cpp : implementation file |
|
// |
|
|
|
#include "stdafx.h" |
|
#include "PrintProgressDialog.h" |
|
|
|
#ifdef _DEBUG |
|
#define new DEBUG_NEW |
|
#undef THIS_FILE |
|
static char THIS_FILE[] = __FILE__; |
|
#endif |
|
|
|
///////////////////////////////////////////////////////////////////////////// |
|
// CPrintProgressDialog dialog |
|
|
|
class CDlgPrintListener : public nsIWebProgressListener |
|
{ |
|
// Construction |
|
public: |
|
CDlgPrintListener(CPrintProgressDialog* aDlg); |
|
~CDlgPrintListener(); |
|
|
|
NS_DECL_ISUPPORTS |
|
NS_DECL_NSIWEBPROGRESSLISTENER |
|
|
|
void ClearDlg() { m_PrintDlg = NULL; } // weak reference |
|
|
|
// Implementation |
|
protected: |
|
CPrintProgressDialog* m_PrintDlg; |
|
}; |
|
|
|
NS_IMPL_ADDREF(CDlgPrintListener) |
|
NS_IMPL_RELEASE(CDlgPrintListener) |
|
|
|
NS_INTERFACE_MAP_BEGIN(CDlgPrintListener) |
|
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIWebProgressListener) |
|
NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener) |
|
NS_INTERFACE_MAP_END |
|
|
|
|
|
CDlgPrintListener::CDlgPrintListener(CPrintProgressDialog* aDlg) : |
|
m_PrintDlg(aDlg) |
|
{ |
|
} |
|
|
|
CDlgPrintListener::~CDlgPrintListener() |
|
{ |
|
} |
|
|
|
/* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long aStateFlags, in nsresult aStatus); */ |
|
NS_IMETHODIMP |
|
CDlgPrintListener::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus) |
|
{ |
|
if (m_PrintDlg) { |
|
if (aStateFlags == (nsIWebProgressListener::STATE_START|nsIWebProgressListener::STATE_IS_DOCUMENT)) { |
|
return m_PrintDlg->OnStartPrinting(); |
|
|
|
} else if (aStateFlags == (nsIWebProgressListener::STATE_STOP|nsIWebProgressListener::STATE_IS_DOCUMENT)) { |
|
return m_PrintDlg->OnEndPrinting(aStatus); |
|
} |
|
} |
|
return NS_OK; |
|
} |
|
|
|
/* void onProgressChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aCurSelfProgress, in long aMaxSelfProgress, in long aCurTotalProgress, in long aMaxTotalProgress); */ |
|
NS_IMETHODIMP |
|
CDlgPrintListener::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress) |
|
{ |
|
if (m_PrintDlg) { |
|
return m_PrintDlg->OnProgressPrinting(aCurSelfProgress, aMaxSelfProgress); |
|
} |
|
return NS_OK; |
|
} |
|
|
|
/* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */ |
|
NS_IMETHODIMP |
|
CDlgPrintListener::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location, uint32_t aFlags) |
|
{ |
|
return NS_OK; |
|
} |
|
|
|
/* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */ |
|
NS_IMETHODIMP |
|
CDlgPrintListener::OnStatusChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsresult aStatus, const PRUnichar *aMessage) |
|
{ |
|
return NS_OK; |
|
} |
|
|
|
/* void onSecurityChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in unsigned long state); */ |
|
NS_IMETHODIMP |
|
CDlgPrintListener::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state) |
|
{ |
|
return NS_OK; |
|
} |
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////// |
|
// CPrintProgressDialog dialog |
|
|
|
|
|
CPrintProgressDialog::CPrintProgressDialog(/*nsIWebBrowser* aWebBrowser, |
|
nsIPrintSettings* aPrintSettings,*/ |
|
CWnd* pParent /*=NULL*/) |
|
: CDialog(CPrintProgressDialog::IDD, pParent), |
|
// m_WebBrowser(aWebBrowser), |
|
m_PrintListener(nullptr), |
|
// m_PrintSettings(aPrintSettings), |
|
m_InModalMode(PR_FALSE) |
|
{ |
|
m_PrintListener = new CDlgPrintListener(this); |
|
//{{AFX_DATA_INIT(CPrintProgressDialog) |
|
// NOTE: the ClassWizard will add member initialization here |
|
//}}AFX_DATA_INIT |
|
} |
|
|
|
CPrintProgressDialog::~CPrintProgressDialog() |
|
{ |
|
CDlgPrintListener * pl = (CDlgPrintListener*)m_PrintListener.get(); |
|
if (pl) { |
|
pl->ClearDlg(); |
|
} |
|
} |
|
|
|
|
|
void CPrintProgressDialog::DoDataExchange(CDataExchange* pDX) |
|
{ |
|
CDialog::DoDataExchange(pDX); |
|
//{{AFX_DATA_MAP(CPrintProgressDialog) |
|
// NOTE: the ClassWizard will add DDX and DDV calls here |
|
//}}AFX_DATA_MAP |
|
} |
|
|
|
|
|
BEGIN_MESSAGE_MAP(CPrintProgressDialog, CDialog) |
|
//{{AFX_MSG_MAP(CPrintProgressDialog) |
|
//}}AFX_MSG_MAP |
|
END_MESSAGE_MAP() |
|
|
|
///////////////////////////////////////////////////////////////////////////// |
|
// CPrintProgressDialog message handlers |
|
static void GetLocalRect(CWnd * aWnd, CRect& aRect, CWnd * aParent) |
|
{ |
|
CRect wr; |
|
aParent->GetWindowRect(wr); |
|
|
|
CRect cr; |
|
aParent->GetClientRect(cr); |
|
|
|
aWnd->GetWindowRect(aRect); |
|
|
|
int borderH = wr.Height() - cr.Height(); |
|
int borderW = (wr.Width() - cr.Width())/2; |
|
aRect.top -= wr.top+borderH-borderW; |
|
aRect.left -= wr.left+borderW; |
|
aRect.right -= wr.left+borderW; |
|
aRect.bottom -= wr.top+borderH-borderW; |
|
|
|
} |
|
|
|
BOOL CPrintProgressDialog::OnInitDialog() |
|
{ |
|
CDialog::OnInitDialog(); |
|
|
|
CRect clientRect; |
|
GetClientRect(&clientRect); |
|
|
|
CRect titleRect; |
|
GetLocalRect(GetDlgItem(IDC_PPD_DOC_TITLE_STATIC), titleRect, this); |
|
|
|
CRect itemRect; |
|
GetLocalRect(GetDlgItem(IDC_PPD_DOC_TXT), itemRect, this); |
|
|
|
CRect progRect; |
|
progRect.left = titleRect.left; |
|
progRect.top = itemRect.top+itemRect.Height()+5; |
|
progRect.right = clientRect.Width()-(2*titleRect.left); |
|
progRect.bottom = progRect.top+titleRect.Height(); |
|
|
|
|
|
m_wndProgress.Create (WS_CHILD | WS_VISIBLE, progRect, this, -1); |
|
m_wndProgress.SetPos (0); |
|
|
|
return TRUE; // return TRUE unless you set the focus to a control |
|
// EXCEPTION: OCX Property Pages should return FALSE |
|
} |
|
|
|
|
|
int CPrintProgressDialog::DoModal( ) |
|
{ |
|
m_InModalMode = TRUE; |
|
return CDialog::DoModal(); |
|
} |
|
|
|
|
|
/* void OnStartPrinting (); */ |
|
NS_IMETHODIMP |
|
CPrintProgressDialog::OnStartPrinting() |
|
{ |
|
return NS_OK; |
|
} |
|
|
|
/* void OnProgressPrinting (in PRUint32 aProgress, in PRUint32 aProgressMax); */ |
|
NS_IMETHODIMP |
|
CPrintProgressDialog::OnProgressPrinting(PRUint32 aProgress, PRUint32 aProgressMax) |
|
{ |
|
if (m_wndProgress.m_hWnd == NULL) return NS_OK; |
|
|
|
// Initialize the progress meter we we get the "zero" progress |
|
// which also tells us the max progress |
|
if (aProgress == 0) { |
|
CWnd *pWnd = GetDlgItem(IDC_PPD_DOC_TXT); |
|
if(pWnd) |
|
pWnd->SetWindowText(m_URL); |
|
|
|
m_wndProgress.SetRange(0, aProgressMax); |
|
m_wndProgress.SetPos(0); |
|
} |
|
m_wndProgress.SetPos(aProgress); |
|
RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW); |
|
|
|
return NS_OK; |
|
} |
|
|
|
/* void OnEndPrinting (in PRUint32 aStatus); */ |
|
NS_IMETHODIMP |
|
CPrintProgressDialog::OnEndPrinting(nsresult aStatus) |
|
{ |
|
// Here we need to know whether we have gone "modal" |
|
// because we could get notified here if the user cancels |
|
// before we ever get a chance to go into the modal loop |
|
if (m_InModalMode) { |
|
EndDialog(1); |
|
} |
|
return NS_OK; |
|
} |
|
|
|
void CPrintProgressDialog::OnCancel() |
|
{/* |
|
nsCOMPtr<nsIWebBrowserPrint> print(do_GetInterface(m_WebBrowser)); |
|
if (print) { |
|
print->Cancel(); |
|
}*/ |
|
|
|
CDialog::OnCancel(); |
|
} |
|
|
|
void CPrintProgressDialog::SetURI(LPCTSTR aTitle) |
|
{ |
|
m_URL = aTitle; |
|
}
|
|
|