This patch is actually part of Bug 115136, but I think its best to get this part

of it in now before the API freeze.
It adds several new attrs to the nsIWebBrowserPrint API and implments them in DocumentViewer.
It also adds a new platform specific interface for PrintSettings that will be
used when the "pluggable" dialog work gets checked in. Although these have been
tested via BUg 115136, these little nto no risk now because no one is using them yet.
Bug 132827 r=dcone sr=attinasi a=asa
This commit is contained in:
rods%netscape.com 2006-02-07 01:13:47 +00:00
Родитель 1a380c5823
Коммит 691d9fc777
7 изменённых файлов: 291 добавлений и 1 удалений

Просмотреть файл

@ -0,0 +1,78 @@
/* -*- 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) 2000
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Don Cone <dcone@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 "nsISupports.idl"
%{ C++
#include "windows.h"
%}
/**
* Native types
*/
[ptr] native nsDevMode(DEVMODE);
/**
* Simplified PrintSettings for Windows interface
*
* @status UNDER_REVIEW
*/
[scriptable, uuid(FF328FE4-41D5-4b78-82AB-6B1FBC7930AF)]
interface nsIPrintSettingsWin : nsISupports
{
/**
* Data Members
*
* Each of these data members make a copy
* of the contents. If you get the value,
* you own the memory.
*
* The following three pieces of data are needed
* to create a DC for printing. These are typcially
* gotten via the PrintDLG call ro can be obtained
* via the "m_pd" data member of the CPrintDialog
* in MFC.
*/
[noscript] attribute charPtr deviceName;
[noscript] attribute charPtr driverName;
[noscript] attribute nsDevMode devMode;
};

Просмотреть файл

@ -352,6 +352,16 @@ nsDeviceContextSpecWin::SetPrintSettingsFromDevMode(nsIPrintSettings* aPrintSett
aPrintSettings->SetNumCopies(PRInt32(aDevMode->dmCopies));
}
if (aDevMode->dmFields & DM_SCALE) {
double scale = double(aDevMode->dmScale) / 100.0f;
if (scale != 1.0) {
aPrintSettings->SetScaling(scale);
aDevMode->dmScale = 100;
// To turn this on you must change where the mPrt->mShrinkToFit is being set in the DocumentViewer
//aPrintSettings->SetShrinkToFit(PR_FALSE);
}
}
if (doingPaperSize) {
aPrintSettings->SetPaperSizeType(nsIPrintSettings::kPaperSizeNativeData);
aPrintSettings->SetPaperData(aDevMode->dmPaperSize);
@ -1092,6 +1102,12 @@ nsDeviceContextSpecWin::ShowNativePrintDialog(nsIWidget *aWidget, PRBool aQuiet)
BOOL result = ::PrintDlg(&prntdlg);
if (TRUE == result) {
if (mPrintSettings && prntdlg.hDevMode != NULL) {
// Transfer the settings from the native data to the PrintSettings
LPDEVMODE devMode = (LPDEVMODE)::GlobalLock(prntdlg.hDevMode);
SetPrintSettingsFromDevMode(mPrintSettings, devMode);
::GlobalUnlock(prntdlg.hDevMode);
}
DEVNAMES *devnames = (DEVNAMES *)::GlobalLock(prntdlg.hDevNames);
if ( NULL != devnames ) {

Просмотреть файл

@ -36,6 +36,7 @@
*
* ***** END LICENSE BLOCK ***** */
#include "nsPrintOptionsWin.h"
#include "nsPrintSettingsWin.h"
@ -56,3 +57,17 @@ nsPrintOptionsWin::~nsPrintOptionsWin()
{
}
/* nsIPrintSettings CreatePrintSettings (); */
NS_IMETHODIMP nsPrintOptionsWin::CreatePrintSettings(nsIPrintSettings **_retval)
{
nsresult rv = NS_OK;
nsPrintSettingsWin* printSettings = new nsPrintSettingsWin(); // does not initially ref count
NS_ASSERTION(printSettings, "Can't be NULL!");
rv = printSettings->QueryInterface(NS_GET_IID(nsIPrintSettings), (void**)_retval); // ref counts
NS_ENSURE_SUCCESS(rv, rv);
InitPrintSettingsFromPrefs(*_retval, PR_FALSE, 0); // ignore return value
return rv;
}

Просмотреть файл

@ -35,6 +35,7 @@ public:
nsPrintOptionsWin();
virtual ~nsPrintOptionsWin();
NS_IMETHOD CreatePrintSettings(nsIPrintSettings **_retval);
};

Просмотреть файл

@ -0,0 +1,128 @@
/* -*- 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 ***** */
#include "nsPrintSettingsWin.h"
#include "nsCRT.h"
NS_IMPL_ISUPPORTS_INHERITED1(nsPrintSettingsWin,
nsPrintSettings,
nsIPrintSettingsWin)
/** ---------------------------------------------------
* See documentation in nsPrintSettingsWin.h
* @update
*/
nsPrintSettingsWin::nsPrintSettingsWin() :
nsPrintSettings(),
mDeviceName(nsnull),
mDriverName(nsnull),
mDevMode(nsnull)
{
}
/** ---------------------------------------------------
* See documentation in nsPrintSettingsWin.h
* @update
*/
nsPrintSettingsWin::~nsPrintSettingsWin()
{
if (mDeviceName) nsCRT::free(mDeviceName);
if (mDriverName) nsCRT::free(mDriverName);
if (mDevMode) free(mDevMode);
}
/* [noscript] attribute charPtr deviceName; */
NS_IMETHODIMP nsPrintSettingsWin::SetDeviceName(char * aDeviceName)
{
if (mDeviceName) {
nsCRT::free(mDeviceName);
}
mDeviceName = aDeviceName?nsCRT::strdup(aDeviceName):nsnull;
return NS_OK;
}
NS_IMETHODIMP nsPrintSettingsWin::GetDeviceName(char * *aDeviceName)
{
NS_ENSURE_ARG_POINTER(aDeviceName);
*aDeviceName = mDeviceName?nsCRT::strdup(mDeviceName):nsnull;
return NS_OK;
}
/* [noscript] attribute charPtr driverName; */
NS_IMETHODIMP nsPrintSettingsWin::SetDriverName(char * aDriverName)
{
if (mDriverName) {
nsCRT::free(mDriverName);
}
mDriverName = aDriverName?nsCRT::strdup(aDriverName):nsnull;
return NS_OK;
}
NS_IMETHODIMP nsPrintSettingsWin::GetDriverName(char * *aDriverName)
{
NS_ENSURE_ARG_POINTER(aDriverName);
*aDriverName = mDriverName?nsCRT::strdup(mDriverName):nsnull;
return NS_OK;
}
/* [noscript] attribute nsDevMode devMode; */
NS_IMETHODIMP nsPrintSettingsWin::GetDevMode(DEVMODE * *aDevMode)
{
NS_ENSURE_ARG_POINTER(aDevMode);
if (mDevMode) {
size_t size = sizeof(*mDevMode);
*aDevMode = (LPDEVMODE)malloc(size);
memcpy(*aDevMode, mDevMode, size);
} else {
*aDevMode = nsnull;
}
return NS_OK;
}
NS_IMETHODIMP nsPrintSettingsWin::SetDevMode(DEVMODE * aDevMode)
{
if (mDevMode) {
free(mDevMode);
mDevMode = NULL;
}
if (aDevMode) {
size_t size = sizeof(*aDevMode);
mDevMode = (LPDEVMODE)malloc(size);
memcpy(mDevMode, aDevMode, size);
}
return NS_OK;
}

Просмотреть файл

@ -0,0 +1,52 @@
/* -*- Mode: IDL; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla 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/MPL/
*
* 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 the Mozilla browser.
*
* The Initial Developer of the Original Code is Netscape
* Communications, Inc. Portions created by Netscape are
* Copyright (C) 1999, Mozilla. All Rights Reserved.
*
* Contributor(s):
*
*/
#ifndef nsPrintSettingsWin_h__
#define nsPrintSettingsWin_h__
#include "nsPrintSettingsImpl.h"
#include "nsIPrintSettingsWin.h"
#include <windows.h>
//*****************************************************************************
//*** nsPrintSettingsWin
//*****************************************************************************
class nsPrintSettingsWin : public nsPrintSettings,
public nsIPrintSettingsWin
{
public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIPRINTSETTINGSWIN
nsPrintSettingsWin();
virtual ~nsPrintSettingsWin();
protected:
char* mDeviceName;
char* mDriverName;
LPDEVMODE mDevMode;
};
#endif /* nsPrintSettingsWin_h__ */

Просмотреть файл

@ -30,7 +30,7 @@
//*****************************************************************************
//*** nsPrintSettings
//*****************************************************************************
class nsPrintSettings : public nsIPrintSettings
class NS_GFX nsPrintSettings : public nsIPrintSettings
{
public:
NS_DECL_ISUPPORTS