Implement nsPrintingPromptService for MfcEmbed

Bug 154244 r=chak sr=rpotts


git-svn-id: svn://10.0.0.236/trunk@124418 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
rods%netscape.com
2002-07-01 20:30:18 +00:00
parent 264c3d6c83
commit 6c87171d9e
13 changed files with 2536 additions and 3 deletions

View File

@@ -72,6 +72,12 @@ static char THIS_FILE[] = __FILE__;
{0xa2112d6a, 0x0e28, 0x421f, {0xb4, 0x6a, 0x25, 0xc0, 0xb3, 0x8, 0xcb, 0xd0}}
static NS_DEFINE_CID(kPromptServiceCID, NS_PROMPTSERVICE_CID);
// this is for overriding the Mozilla default PrintingPromptService component
#include "PrintingPromptService.h"
#define NS_PRINTINGPROMPTSERVICE_CID \
{0xe042570c, 0x62de, 0x4bb6, { 0xa6, 0xe0, 0x79, 0x8e, 0x3c, 0x7, 0xb4, 0xdf}}
static NS_DEFINE_CID(kPrintingPromptServiceCID, NS_PRINTINGPROMPTSERVICE_CID);
// this is for overriding the Mozilla default HelperAppLauncherDialog
#include "HelperAppService.h"
#define NS_HELPERAPPLAUNCHERDIALOG_CID \
@@ -209,6 +215,29 @@ nsresult CMfcEmbedApp::OverrideComponents()
::FreeLibrary(overlib);
}
// replace Mozilla's default PrintingPromptService with our own, if the
// expected override DLL is present
overlib = ::LoadLibrary(kComponentsLibname);
if (overlib) {
InitPrintingPromptServiceType InitLib;
MakeFactoryType MakeFactory;
InitLib = reinterpret_cast<InitPrintingPromptServiceType>(::GetProcAddress(overlib, kPrintingPromptServiceInitFuncName));
MakeFactory = reinterpret_cast<MakeFactoryType>(::GetProcAddress(overlib, kPrintingPromptServiceFactoryFuncName));
if (InitLib && MakeFactory) {
InitLib(overlib);
nsCOMPtr<nsIFactory> printingPromptFactory;
rv = MakeFactory(getter_AddRefs(printingPromptFactory));
if (NS_SUCCEEDED(rv))
nsComponentManager::RegisterFactory(kPrintingPromptServiceCID,
"Printing Prompt Service",
"@mozilla.org/embedcomp/printingprompt-service;1",
printingPromptFactory,
PR_TRUE); // replace existing
} else
::FreeLibrary(overlib);
}
return rv;
}

View File

@@ -171,6 +171,21 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,150,94,50,14
END
IDD_PRINT_PROGRESS_DIALOG DIALOG DISCARDABLE 0, 0, 294, 53
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Print Progress"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "Cancel",IDCANCEL,237,36,50,14
RTEXT "URL:",IDC_PRINT_PROGRESS_URL_LABEL_TXT,7,7,30,8
LTEXT "...",IDC_PRINT_PROGRESS_URL_TXT,41,7,231,8
RTEXT "Progress:",IDC_STATIC,7,18,30,8
CONTROL "Progress1",IDC_PRINT_PROGRESS_PRG,"msctls_progress32",
WS_BORDER,41,18,217,8
LTEXT "Preparing...",IDC_PRINT_PROGRESS_TXT,41,18,217,8
LTEXT "",IDC_PRINT_PROGRESS_PERCENT_TXT,264,18,19,8
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -41,6 +41,11 @@ REQUIRES = \
xpcom \
string \
dom \
content \
gfx \
widget \
pref \
intl \
webbrwsr \
windowwatcher \
exthandler \
@@ -51,11 +56,17 @@ REQUIRES = \
$(NULL)
CPPSRCS = \
nsPrintDialogUtil.cpp \
nsPrintProgressParams.cpp \
PrintingPromptService.cpp \
PrintProgressDialog.cpp \
Dialogs.cpp \
PromptService.cpp \
HelperAppDlg.cpp \
$(NULL)
EXTRA_DSO_LIBS = gkgfx
EXTRA_DSO_LDOPTS += \
$(EXTRA_DSO_LIBS) \
$(XPCOM_LIBS) \

View File

@@ -0,0 +1,274 @@
// PrintProgressDialog.cpp : implementation file
//
#include "stdafx.h"
//#include "mfcembed.h"
#include "PrintProgressDialog.h"
//#include "BrowserView.h"
#include "nsIWebBrowser.h"
#include "nsIWebBrowserPrint.h"
#include "nsIInterfaceRequestorUtils.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);
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)
{
NS_INIT_ISUPPORTS();
}
/* 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)
{
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(CWnd* pParent,
BOOL aIsForPrinting,
nsIPrintProgressParams* aPPParams,
nsIWebBrowserPrint* aWebBrowserPrint,
nsIPrintSettings* aPrintSettings)
: CDialog(CPrintProgressDialog::IDD, pParent),
m_WebBrowserPrint(aWebBrowserPrint),
m_PPParams(aPPParams),
m_PrintListener(nsnull),
m_PrintSettings(aPrintSettings),
m_HasStarted(FALSE),
m_IsForPrinting(aIsForPrinting)
{
//{{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
BOOL CPrintProgressDialog::OnInitDialog()
{
CDialog::OnInitDialog();
CWnd* cancelBtn = (CWnd*)GetDlgItem(IDCANCEL);
if (cancelBtn)
{
if (m_IsForPrinting)
{
cancelBtn->EnableWindow(FALSE);
} else {
cancelBtn->ShowWindow(SW_HIDE);
SetWindowText("Print Preview");
}
}
SetDocAndURL();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/* void OnStartPrinting (); */
NS_IMETHODIMP
CPrintProgressDialog::OnStartPrinting()
{
CProgressCtrl* progressCtrl = (CProgressCtrl *)GetDlgItem(IDC_PRINT_PROGRESS_PRG);
CWnd* progressText = (CWnd*)GetDlgItem(IDC_PRINT_PROGRESS_TXT);
if (!progressCtrl || !progressText) return NS_OK;
m_HasStarted = TRUE;
progressCtrl->ShowWindow(SW_HIDE);
SetDocAndURL();
return NS_OK;
}
/* void OnProgressPrinting (in PRUint32 aProgress, in PRUint32 aProgressMax); */
NS_IMETHODIMP
CPrintProgressDialog::OnProgressPrinting(PRUint32 aProgress, PRUint32 aProgressMax)
{
CProgressCtrl* progressCtrl = (CProgressCtrl *)GetDlgItem(IDC_PRINT_PROGRESS_PRG);
CWnd* progressText = (CWnd*)GetDlgItem(IDC_PRINT_PROGRESS_TXT);
if (!progressCtrl || !progressText) return NS_OK;
if (m_HasStarted && aProgress != 100)
{
progressText->ShowWindow(SW_HIDE);
progressCtrl->ShowWindow(SW_SHOW);
progressCtrl->SetRange(0, aProgressMax);
m_HasStarted = FALSE;
progressText->UpdateWindow();
}
SetDocAndURL();
// Initialize the progress meter we we get the "zero" progress
// which also tells us the max progress
if (aProgress == 0) {
progressCtrl->SetRange(0, aProgressMax);
progressCtrl->SetPos(0);
}
CWnd* cancelBtn = (CWnd*)GetDlgItem(IDCANCEL);
if (cancelBtn && m_IsForPrinting)
{
cancelBtn->EnableWindow(TRUE);
}
progressCtrl->SetPos(aProgress);
RedrawWindow(NULL, NULL, RDW_INVALIDATE | RDW_UPDATENOW);
return NS_OK;
}
/* void OnEndPrinting (in PRUint32 aStatus); */
NS_IMETHODIMP
CPrintProgressDialog::OnEndPrinting(PRUint32 aStatus)
{
return NS_OK;
}
void CPrintProgressDialog::OnCancel()
{
if (m_WebBrowserPrint) {
m_WebBrowserPrint->Cancel();
}
CDialog::OnCancel();
}
void CPrintProgressDialog::SetDocAndURL()
{
USES_CONVERSION;
if (m_PPParams)
{
PRUnichar* docTitle = nsnull;
PRUnichar* urlStr = nsnull;
m_PPParams->GetDocTitle(&docTitle);
m_PPParams->GetDocURL(&urlStr);
if (docTitle)
{
if (*docTitle && W2T(docTitle))
{
SetWindowText(W2T(docTitle));
}
nsMemory::Free(docTitle);
}
if (urlStr)
{
if (*urlStr && W2T(urlStr))
{
CWnd *pWnd = GetDlgItem(IDC_PRINT_PROGRESS_URL_TXT);
if (pWnd)
{
pWnd->SetWindowText(W2T(urlStr));
}
}
nsMemory::Free(urlStr);
}
}
Invalidate();
UpdateWindow();
}

View File

@@ -0,0 +1,73 @@
#if !defined(AFX_PRINTPROGRESSDIALOG_H__1E3AA1B5_B8BB_4B25_86A5_A90E663D137F__INCLUDED_)
#define AFX_PRINTPROGRESSDIALOG_H__1E3AA1B5_B8BB_4B25_86A5_A90E663D137F__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// PrintProgressDialog.h : header file
//
#include "resource.h"
#include "nsIWebProgressListener.h"
#include "nsIWebBrowserPrint.h"
#include "nsIPrintSettings.h"
#include "nsIPrintProgressParams.h"
/////////////////////////////////////////////////////////////////////////////
// CPrintProgressDialog dialog
class CPrintProgressDialog : public CDialog
{
// Construction
public:
CPrintProgressDialog(CWnd* pParent,
BOOL aIsForPrinting,
nsIPrintProgressParams* aPPParams,
nsIWebBrowserPrint* aWebBrowserPrint,
nsIPrintSettings* aPrintSettings);
virtual ~CPrintProgressDialog();
// Helper
void SetDocAndURL();
NS_IMETHOD OnStartPrinting(void);
NS_IMETHOD OnProgressPrinting(PRUint32 aProgress, PRUint32 aProgressMax);
NS_IMETHOD OnEndPrinting(PRUint32 aStatus);
// Dialog Data
//{{AFX_DATA(CPrintProgressDialog)
enum { IDD = IDD_PRINT_PROGRESS_DIALOG };
// NOTE: the ClassWizard will add data members here
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CPrintProgressDialog)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
CProgressCtrl m_wndProgress;
CString m_URL;
nsCOMPtr<nsIWebBrowserPrint> m_WebBrowserPrint;
nsCOMPtr<nsIPrintProgressParams> m_PPParams;
nsCOMPtr<nsIWebProgressListener> m_PrintListener;
nsCOMPtr<nsIPrintSettings> m_PrintSettings;
BOOL m_HasStarted;
BOOL m_IsForPrinting;
// Generated message map functions
//{{AFX_MSG(CPrintProgressDialog)
virtual BOOL OnInitDialog();
virtual void OnCancel();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_PRINTPROGRESSDIALOG_H__1E3AA1B5_B8BB_4B25_86A5_A90E663D137F__INCLUDED_)

View File

@@ -0,0 +1,438 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
/* PrintingPromptService is intended to override the default Mozilla PrintingPromptService,
giving nsIPrompt implementations of our own design, rather than using
Mozilla's. Do this by building this into a component and registering the
factory with the same CID/ContractID as Mozilla's (see MfcEmbed.cpp).
*/
#include "stdafx.h"
#include "Dialogs.h"
#include "PrintingPromptService.h"
#include "nsCOMPtr.h"
#include "nsMemory.h"
#include "nsString.h"
#include "nsReadableUtils.h"
#include "nsIDOMWindow.h"
#include "nsIEmbeddingSiteWindow.h"
#include "nsIFactory.h"
#include "nsIPrintingPromptService.h"
#include "nsIServiceManager.h"
#include "nsIWebBrowserChrome.h"
#include "nsIWindowWatcher.h"
#include "nsIWebProgressListener.h"
#include "nsPrintProgressParams.h"
#include "nsPrintDialogUtil.h"
#include "PrintProgressDialog.h"
// For PLEvent
#include "nsIEventQueueService.h"
#include "plevent.h"
static HINSTANCE gInstance;
//*****************************************************************************
// ResourceState
//*****************************************************************************
class ResourceState {
public:
ResourceState() {
mPreviousInstance = ::AfxGetResourceHandle();
::AfxSetResourceHandle(gInstance);
}
~ResourceState() {
::AfxSetResourceHandle(mPreviousInstance);
}
private:
HINSTANCE mPreviousInstance;
};
//*****************************************************************************
// CPrintingPromptService
//*****************************************************************************
class CPrintingPromptService: public nsIPrintingPromptService,
public nsIWebProgressListener {
public:
CPrintingPromptService();
virtual ~CPrintingPromptService();
NS_DECL_ISUPPORTS
NS_DECL_NSIPRINTINGPROMPTSERVICE
NS_DECL_NSIWEBPROGRESSLISTENER
void NotifyObserver();
private:
PRBool FirePauseEvent();
CWnd *CWndForDOMWindow(nsIDOMWindow *aWindow);
nsCOMPtr<nsIWindowWatcher> mWWatch;
nsCOMPtr<nsIWebProgressListener> mWebProgressListener;
nsCOMPtr<nsIObserver> mObserver;
CPrintProgressDialog* m_PPDlg;
};
// Define PL Callback Functions
static void PR_CALLBACK HandlePLEvent(PLEvent* aEvent);
static void PR_CALLBACK DestroyPLEvent(PLEvent* aEvent);
//*****************************************************************************
NS_IMPL_ISUPPORTS2(CPrintingPromptService, nsIPrintingPromptService, nsIWebProgressListener)
CPrintingPromptService::CPrintingPromptService() :
mWWatch(do_GetService("@mozilla.org/embedcomp/window-watcher;1")),
m_PPDlg(NULL)
{
NS_INIT_REFCNT();
}
CPrintingPromptService::~CPrintingPromptService() {
}
CWnd *
CPrintingPromptService::CWndForDOMWindow(nsIDOMWindow *aWindow)
{
nsCOMPtr<nsIWebBrowserChrome> chrome;
CWnd *val = 0;
if (mWWatch) {
nsCOMPtr<nsIDOMWindow> fosterParent;
if (!aWindow) { // it will be a dependent window. try to find a foster parent.
mWWatch->GetActiveWindow(getter_AddRefs(fosterParent));
aWindow = fosterParent;
}
mWWatch->GetChromeForWindow(aWindow, getter_AddRefs(chrome));
}
if (chrome) {
nsCOMPtr<nsIEmbeddingSiteWindow> site(do_QueryInterface(chrome));
if (site) {
HWND w;
site->GetSiteWindow(reinterpret_cast<void **>(&w));
val = CWnd::FromHandle(w);
}
}
return val;
}
///////////////////////////////////////////////////////////////////////////////
// nsIPrintingPrompt
//-----------------------------------------------------------
NS_IMETHODIMP
CPrintingPromptService::ShowPrintDialog(nsIDOMWindow *parent, nsIWebBrowserPrint *webBrowserPrint, nsIPrintSettings *printSettings)
{
//NS_ENSURE_ARG(parent);
CWnd* wnd = CWndForDOMWindow(parent);
NS_ASSERTION(wnd && wnd->m_hWnd, "Couldn't get native window for PRint Dialog!");
if (wnd && wnd->m_hWnd) {
return NativeShowPrintDialog(wnd->m_hWnd, webBrowserPrint, printSettings);
} else {
return NS_ERROR_FAILURE;
}
}
//-----------------------------------------------------------
PRBool
CPrintingPromptService::FirePauseEvent()
{
static NS_DEFINE_CID(kEventQueueServiceCID, NS_EVENTQUEUESERVICE_CID);
nsCOMPtr<nsIEventQueueService> event_service = do_GetService(kEventQueueServiceCID);
if (!event_service)
{
NS_WARNING("Failed to get event queue service");
return PR_FALSE;
}
nsCOMPtr<nsIEventQueue> event_queue;
event_service->GetThreadEventQueue(NS_CURRENT_THREAD,
getter_AddRefs(event_queue));
if (!event_queue)
{
NS_WARNING("Failed to get event queue from service");
return PR_FALSE;
}
PLEvent *event = new PLEvent;
if (!event)
{
NS_WARNING("Out of memory?");
return PR_FALSE;
}
PL_InitEvent(event, this, (PLHandleEventProc)::HandlePLEvent, (PLDestroyEventProc)::DestroyPLEvent);
// The event owns the content pointer now.
NS_ADDREF_THIS();
event_queue->PostEvent(event);
return PR_TRUE;
}
/* void showProgress (in nsIDOMWindow parent, in nsIWebBrowserPrint webBrowserPrint, in nsIPrintSettings printSettings, in nsIObserver openDialogObserver, in boolean isForPrinting, out nsIWebProgressListener webProgressListener, out nsIPrintProgressParams printProgressParams, out boolean notifyOnOpen); */
NS_IMETHODIMP
CPrintingPromptService::ShowProgress(nsIDOMWindow* parent,
nsIWebBrowserPrint* webBrowserPrint, // ok to be null
nsIPrintSettings* printSettings, // ok to be null
nsIObserver* openDialogObserver, // ok to be null
PRBool isForPrinting,
nsIWebProgressListener** webProgressListener,
nsIPrintProgressParams** printProgressParams,
PRBool* notifyOnOpen)
{
NS_ENSURE_ARG(webProgressListener);
NS_ENSURE_ARG(printProgressParams);
NS_ENSURE_ARG(notifyOnOpen);
ResourceState setState;
nsresult rv;
nsPrintProgressParams* prtProgressParams = new nsPrintProgressParams();
rv = prtProgressParams->QueryInterface(NS_GET_IID(nsIPrintProgressParams), (void**)printProgressParams);
NS_ENSURE_SUCCESS(rv, rv);
mObserver = openDialogObserver;
*notifyOnOpen = PR_FALSE;
if (printProgressParams)
{
CWnd *wnd = CWndForDOMWindow(parent);
m_PPDlg = new CPrintProgressDialog(wnd, isForPrinting, *printProgressParams, webBrowserPrint, printSettings);
m_PPDlg->Create(IDD_PRINT_PROGRESS_DIALOG);
m_PPDlg->ShowWindow(SW_SHOW);
m_PPDlg->UpdateWindow();
*notifyOnOpen = FirePauseEvent();
}
*webProgressListener = NS_STATIC_CAST(nsIWebProgressListener*, this);
NS_ADDREF(*webProgressListener);
return rv;
}
/* void showPageSetup (in nsIDOMWindow parent, in nsIPrintSettings printSettings); */
NS_IMETHODIMP
CPrintingPromptService::ShowPageSetup(nsIDOMWindow *parent, nsIPrintSettings *printSettings, nsIObserver *aObs)
{
NS_ENSURE_ARG(printSettings);
return NS_ERROR_NOT_IMPLEMENTED;
}
/* void showPrinterProperties (in nsIDOMWindow parent, in wstring printerName, in nsIPrintSettings printSettings); */
NS_IMETHODIMP
CPrintingPromptService::ShowPrinterProperties(nsIDOMWindow *parent, const PRUnichar *printerName, nsIPrintSettings *printSettings)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
//------------------------------------------------------------------------
void CPrintingPromptService::NotifyObserver()
{
if (mObserver) {
mObserver->Observe(nsnull, nsnull, nsnull);
}
}
//------------------------------------------------------------------------
void PR_CALLBACK HandlePLEvent(PLEvent* aEvent)
{
CPrintingPromptService *printingPromptService = (CPrintingPromptService*)PL_GetEventOwner(aEvent);
NS_ASSERTION(printingPromptService, "The event owner is null.");
if (printingPromptService) {
printingPromptService->NotifyObserver();
}
}
//------------------------------------------------------------------------
void PR_CALLBACK DestroyPLEvent(PLEvent* aEvent)
{
CPrintingPromptService *printingPromptService = (CPrintingPromptService*)PL_GetEventOwner(aEvent);
NS_IF_RELEASE(printingPromptService);
delete aEvent;
}
//////////////////////////////////////////////////////////////////////
// nsIWebProgressListener
//////////////////////////////////////////////////////////////////////
/* void onStateChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in long aStateFlags, in nsresult aStatus); */
NS_IMETHODIMP
CPrintingPromptService::OnStateChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 aStateFlags, nsresult aStatus)
{
if (aStateFlags & STATE_START)
{
if (m_PPDlg)
{
m_PPDlg->OnStartPrinting();
}
}
if (aStateFlags & STATE_STOP)
{
if (m_PPDlg)
{
m_PPDlg->OnProgressPrinting(100, 100);
m_PPDlg->DestroyWindow();
m_PPDlg = NULL;
}
}
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
CPrintingPromptService::OnProgressChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRInt32 aCurSelfProgress, PRInt32 aMaxSelfProgress, PRInt32 aCurTotalProgress, PRInt32 aMaxTotalProgress)
{
if (m_PPDlg)
{
m_PPDlg->OnProgressPrinting(aCurTotalProgress, aMaxTotalProgress);
}
return NS_OK;
}
/* void onLocationChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsIURI location); */
NS_IMETHODIMP
CPrintingPromptService::OnLocationChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, nsIURI *location)
{
return NS_OK;
}
/* void onStatusChange (in nsIWebProgress aWebProgress, in nsIRequest aRequest, in nsresult aStatus, in wstring aMessage); */
NS_IMETHODIMP
CPrintingPromptService::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
CPrintingPromptService::OnSecurityChange(nsIWebProgress *aWebProgress, nsIRequest *aRequest, PRUint32 state)
{
return NS_OK;
}
//*****************************************************************************
// CPrintingPromptServiceFactory
//*****************************************************************************
class CPrintingPromptServiceFactory : public nsIFactory {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIFACTORY
CPrintingPromptServiceFactory();
virtual ~CPrintingPromptServiceFactory();
};
//*****************************************************************************
NS_IMPL_ISUPPORTS1(CPrintingPromptServiceFactory, nsIFactory)
CPrintingPromptServiceFactory::CPrintingPromptServiceFactory() {
NS_INIT_ISUPPORTS();
}
CPrintingPromptServiceFactory::~CPrintingPromptServiceFactory() {
}
NS_IMETHODIMP CPrintingPromptServiceFactory::CreateInstance(nsISupports *aOuter, const nsIID & aIID, void **aResult)
{
NS_ENSURE_ARG_POINTER(aResult);
*aResult = NULL;
CPrintingPromptService *inst = new CPrintingPromptService;
if (!inst)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv = inst->QueryInterface(aIID, aResult);
if (rv != NS_OK) {
// We didn't get the right interface, so clean up
delete inst;
}
return rv;
}
NS_IMETHODIMP CPrintingPromptServiceFactory::LockFactory(PRBool lock)
{
return NS_OK;
}
//*****************************************************************************
void InitPrintingPromptService(HINSTANCE instance) {
gInstance = instance;
}
nsresult NS_NewPrintingPromptServiceFactory(nsIFactory** aFactory)
{
NS_ENSURE_ARG_POINTER(aFactory);
*aFactory = nsnull;
CPrintingPromptServiceFactory *result = new CPrintingPromptServiceFactory;
if (!result)
return NS_ERROR_OUT_OF_MEMORY;
NS_ADDREF(result);
*aFactory = result;
return NS_OK;
}

View File

@@ -0,0 +1,61 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 2001
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef __PrintingPromptService_h
#define __PrintingPromptService_h
#include "nsError.h"
// this component is for an MFC app; it's Windows. make sure this is defined.
#ifndef XP_WIN
#define XP_WIN
#endif
class nsIFactory;
// factory creator, in hard and soft link formats
extern "C" NS_EXPORT nsresult NS_NewPrintingPromptServiceFactory(nsIFactory** aFactory);
typedef nsresult (__cdecl *MakeFactoryType)(nsIFactory **);
#define kPrintingPromptServiceFactoryFuncName "NS_NewPrintingPromptServiceFactory"
// initialization function, in hard and soft link formats
extern "C" NS_EXPORT void InitPrintingPromptService(HINSTANCE instance);
typedef nsresult (__cdecl *InitPrintingPromptServiceType)(HINSTANCE instance);
#define kPrintingPromptServiceInitFuncName "InitPrintingPromptService"
#endif

View File

@@ -32,6 +32,11 @@ REQUIRES = \
xpcom \
string \
dom \
content \
gfx \
widget \
pref \
intl \
webBrowser_core \
windowwatcher \
exthandler \
@@ -47,11 +52,15 @@ DLL=.\$(OBJDIR)\$(DLLNAME).dll
RESFILE=Dialogs.res
LCFLAGS=/D "WIN32_LEAN_AND_MEAN" /D "_AFXDLL" /D "USE_SINGLE_SIGN_ON" \
/D "_USRDLL" /D "_WINDLL"
/D "_WINDLL"
LLFLAGS=-SUBSYSTEM:windows
CPP_OBJS= \
.\$(OBJDIR)\nsPrintDialogUtil.obj \
.\$(OBJDIR)\nsPrintProgressParams.obj \
.\$(OBJDIR)\PrintingPromptService.obj \
.\$(OBJDIR)\PrintProgressDialog.obj \
.\$(OBJDIR)\Dialogs.obj \
.\$(OBJDIR)\PromptService.obj \
.\$(OBJDIR)\HelperAppDlg.obj \
@@ -60,6 +69,7 @@ CPP_OBJS= \
LLIBS= \
$(LIBNSPR) \
$(DIST)\lib\xpcom.lib \
$(DIST)\lib\gkgfx.lib \
$(NULL)
include <$(DEPTH)\config\rules.mak>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,45 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
*
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef nsFlyOwnDialog_h___
#define nsFlyOwnDialog_h___
nsresult NativeShowPrintDialog(HWND aHWnd,
nsIWebBrowserPrint* aWebBrowserPrint,
nsIPrintSettings* aPrintSettings);
#endif /* nsFlyOwnDialog_h___ */

View File

@@ -0,0 +1,83 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Rod Spears <rods@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#include "nsPrintProgressParams.h"
#include "nsReadableUtils.h"
NS_IMPL_ISUPPORTS1(nsPrintProgressParams, nsIPrintProgressParams)
nsPrintProgressParams::nsPrintProgressParams()
{
NS_INIT_ISUPPORTS();
}
nsPrintProgressParams::~nsPrintProgressParams()
{
}
/* attribute wstring docTitle; */
NS_IMETHODIMP nsPrintProgressParams::GetDocTitle(PRUnichar * *aDocTitle)
{
NS_ENSURE_ARG(aDocTitle);
*aDocTitle = ToNewUnicode(mDocTitle);
return NS_OK;
}
NS_IMETHODIMP nsPrintProgressParams::SetDocTitle(const PRUnichar * aDocTitle)
{
mDocTitle = aDocTitle;
return NS_OK;
}
/* attribute wstring docURL; */
NS_IMETHODIMP nsPrintProgressParams::GetDocURL(PRUnichar * *aDocURL)
{
NS_ENSURE_ARG(aDocURL);
*aDocURL = ToNewUnicode(mDocURL);
return NS_OK;
}
NS_IMETHODIMP nsPrintProgressParams::SetDocURL(const PRUnichar * aDocURL)
{
mDocURL = aDocURL;
return NS_OK;
}

View File

@@ -0,0 +1,59 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
* Version: NPL 1.1/GPL 2.0/LGPL 2.1
*
* The contents of this file are subject to the Netscape Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is
* Netscape Communications Corporation.
* Portions created by the Initial Developer are Copyright (C) 1998
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Rod Spears <rods@netscape.com>
*
* Alternatively, the contents of this file may be used under the terms of
* either the GNU General Public License Version 2 or later (the "GPL"), or
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
* in which case the provisions of the GPL or the LGPL are applicable instead
* of those above. If you wish to allow use of your version of this file only
* under the terms of either the GPL or the LGPL, and not to allow others to
* use your version of this file under the terms of the NPL, indicate your
* decision by deleting the provisions above and replace them with the notice
* and other provisions required by the GPL or the LGPL. If you do not delete
* the provisions above, a recipient may use your version of this file under
* the terms of any one of the NPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
#ifndef __nsPrintProgressParams_h
#define __nsPrintProgressParams_h
#include "nsIPrintProgressParams.h"
#include "nsString.h"
class nsPrintProgressParams : public nsIPrintProgressParams
{
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIPRINTPROGRESSPARAMS
nsPrintProgressParams();
virtual ~nsPrintProgressParams();
private:
nsString mDocTitle;
nsString mDocURL;
};
#endif

View File

@@ -9,6 +9,7 @@
#define IDD_CONFIRM_CHECK_DIALOG 132
#define IDD_PROGRESS_DIALOG 133
#define IDD_CHOOSE_ACTION_DIALOG 134
#define IDD_PRINT_PROGRESS_DIALOG 143
#define IDC_PROMPT_ANSWER 1001
#define IDC_PROMPT_TEXT 1002
#define IDC_USERNAME 1003
@@ -29,15 +30,22 @@
#define IDC_OPEN_USING 1018
#define IDC_CHOOSE_APP 1019
#define IDC_APP_NAME 1020
#define IDC_PRINT_PROGRESS_URL_TXT 1022
#define IDC_PRINT_PROGRESS_PRG 1023
#define IDC_PRINT_PROGRESS_PERCENT_TXT 1024
#define IDC_PRINT_PROGRESS_URL_LABEL_TXT 1025
#define IDC_PRINT_PROGRESS_TXT 1026
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 143
#define _APS_NEXT_RESOURCE_VALUE 144
#define _APS_NEXT_COMMAND_VALUE 32789
#define _APS_NEXT_CONTROL_VALUE 1022
#define _APS_NEXT_CONTROL_VALUE 1027
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif