From 6eb9ee9ff349de435c31e22cddef7db3e4fa2704 Mon Sep 17 00:00:00 2001 From: "rods%netscape.com" Date: Tue, 18 Jun 2002 00:06:32 +0000 Subject: [PATCH] Implement the assign method with an "=" operator Bug 151628 r=ccarlen sr=jst BUg CVS: ---------------------------------------------------------------------- git-svn-id: svn://10.0.0.236/trunk@123479 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/gfx/idl/nsIPrintSettings.idl | 5 + mozilla/gfx/src/mac/nsPrintOptionsMac.cpp | 3 +- mozilla/gfx/src/mac/nsPrintOptionsMac.h | 3 +- mozilla/gfx/src/mac/nsPrintOptionsX.cpp | 3 +- mozilla/gfx/src/mac/nsPrintOptionsX.h | 3 +- mozilla/gfx/src/mac/nsPrintSettingsMac.cpp | 55 +++++++ mozilla/gfx/src/mac/nsPrintSettingsMac.h | 5 + mozilla/gfx/src/mac/nsPrintSettingsX.cpp | 83 ++++++++++ mozilla/gfx/src/mac/nsPrintSettingsX.h | 6 + mozilla/gfx/src/nsPrintOptionsImpl.cpp | 9 +- mozilla/gfx/src/nsPrintOptionsImpl.h | 3 + mozilla/gfx/src/nsPrintSettingsImpl.cpp | 147 ++++++++++++------ mozilla/gfx/src/nsPrintSettingsImpl.h | 17 +- .../gfx/src/windows/nsDeviceContextWin.cpp | 2 +- .../gfx/src/windows/nsPrintSettingsWin.cpp | 144 +++++++++++++++-- mozilla/gfx/src/windows/nsPrintSettingsWin.h | 14 +- 16 files changed, 424 insertions(+), 78 deletions(-) diff --git a/mozilla/gfx/idl/nsIPrintSettings.idl b/mozilla/gfx/idl/nsIPrintSettings.idl index 9eaf60a8c1a..8b83bab5952 100644 --- a/mozilla/gfx/idl/nsIPrintSettings.idl +++ b/mozilla/gfx/idl/nsIPrintSettings.idl @@ -171,6 +171,11 @@ interface nsIPrintSettings : nsISupports */ nsIPrintSettings clone(); + /** + * Assigns the internal values from the "in" arg to the current object + */ + void assign(in nsIPrintSettings aPS); + /** * Data Members */ diff --git a/mozilla/gfx/src/mac/nsPrintOptionsMac.cpp b/mozilla/gfx/src/mac/nsPrintOptionsMac.cpp index cfc07e5cc16..d5ce77c1a02 100644 --- a/mozilla/gfx/src/mac/nsPrintOptionsMac.cpp +++ b/mozilla/gfx/src/mac/nsPrintOptionsMac.cpp @@ -60,8 +60,7 @@ nsPrintOptionsMac::~nsPrintOptionsMac() /** --------------------------------------------------- * See documentation in nsPrintOptionsImpl.h */ -/* nsIPrintSettings CreatePrintSettings (); */ -NS_IMETHODIMP nsPrintOptionsMac::CreatePrintSettings(nsIPrintSettings **_retval) +NS_IMETHODIMP nsPrintOptionsMac::_CreatePrintSettings(nsIPrintSettings **_retval) { nsresult rv; nsPrintSettingsMac* printSettings = new nsPrintSettingsMac(); // does not initially ref count diff --git a/mozilla/gfx/src/mac/nsPrintOptionsMac.h b/mozilla/gfx/src/mac/nsPrintOptionsMac.h index 7b3a4e373f1..0ae89393d7b 100644 --- a/mozilla/gfx/src/mac/nsPrintOptionsMac.h +++ b/mozilla/gfx/src/mac/nsPrintOptionsMac.h @@ -42,8 +42,9 @@ public: NS_IMETHOD GetNativeData(PRInt16 aDataType, void * *_retval); - NS_IMETHOD CreatePrintSettings(nsIPrintSettings **_retval); protected: + nsresult _CreatePrintSettings(nsIPrintSettings **_retval); + nsresult ReadPrefs(nsIPrintSettings* aPS, const nsString& aPrefName, PRUint32 aFlags); nsresult WritePrefs(nsIPrintSettings* aPS, const nsString& aPrefName, PRUint32 aFlags); }; diff --git a/mozilla/gfx/src/mac/nsPrintOptionsX.cpp b/mozilla/gfx/src/mac/nsPrintOptionsX.cpp index 83799b3aea6..202d9a03c0f 100644 --- a/mozilla/gfx/src/mac/nsPrintOptionsX.cpp +++ b/mozilla/gfx/src/mac/nsPrintOptionsX.cpp @@ -67,8 +67,7 @@ nsPrintOptionsX::~nsPrintOptionsX() /** --------------------------------------------------- * See documentation in nsPrintOptionsImpl.h */ -/* nsIPrintSettings CreatePrintSettings (); */ -NS_IMETHODIMP nsPrintOptionsX::CreatePrintSettings(nsIPrintSettings **_retval) +nsresult nsPrintOptionsX::_CreatePrintSettings(nsIPrintSettings **_retval) { nsresult rv; nsPrintSettingsX* printSettings = new nsPrintSettingsX; // does not initially ref count diff --git a/mozilla/gfx/src/mac/nsPrintOptionsX.h b/mozilla/gfx/src/mac/nsPrintOptionsX.h index aadce21db60..bde36a295c4 100644 --- a/mozilla/gfx/src/mac/nsPrintOptionsX.h +++ b/mozilla/gfx/src/mac/nsPrintOptionsX.h @@ -56,9 +56,8 @@ public: NS_IMETHOD GetNativeData(PRInt16 aDataType, void * *_retval); - NS_IMETHOD CreatePrintSettings(nsIPrintSettings **_retval); - protected: + nsresult _CreatePrintSettings(nsIPrintSettings **_retval); nsresult ReadPrefs(nsIPrintSettings* aPS, const nsString& aPrefName, PRUint32 aFlags); nsresult WritePrefs(nsIPrintSettings* aPS, const nsString& aPrefName, PRUint32 aFlags); diff --git a/mozilla/gfx/src/mac/nsPrintSettingsMac.cpp b/mozilla/gfx/src/mac/nsPrintSettingsMac.cpp index 397b44d8589..8921b7486b7 100644 --- a/mozilla/gfx/src/mac/nsPrintSettingsMac.cpp +++ b/mozilla/gfx/src/mac/nsPrintSettingsMac.cpp @@ -61,6 +61,15 @@ nsPrintSettingsMac::nsPrintSettingsMac() : NS_INIT_REFCNT(); } +/** --------------------------------------------------- + */ +nsPrintSettingsMac::nsPrintSettingsMac(const nsPrintSettingsMac& src) : + mPrintRecord(nsnull) +{ + NS_INIT_REFCNT(); + *this = src; +} + /** --------------------------------------------------- */ nsPrintSettingsMac::~nsPrintSettingsMac() @@ -69,6 +78,27 @@ nsPrintSettingsMac::~nsPrintSettingsMac() ::DisposeHandle((Handle)mPrintRecord); } +/** --------------------------------------------------- + */ +nsPrintSettingsMac& nsPrintSettingsMac::operator=(const nsPrintSettingsMac& rhs) +{ + if (this == &rhs) { + return *this; + } + + nsPrintSettings::operator=(rhs); + + if (mPrintRecord) { + ::DisposeHandle((Handle)mPrintRecord); + mPrintRecord = nsnull; + } + Handle copyH = (Handle)rhs.mPrintRecord; + if (::HandToHand(©H) == noErr) + mPrintRecord = (THPrint)copyH; + + return *this; +} + /** --------------------------------------------------- */ NS_IMETHODIMP nsPrintSettingsMac::Init() @@ -181,3 +211,28 @@ NS_IMETHODIMP nsPrintSettingsMac::WritePageSetupToPrefs() return prefBranch->SetCharPref(MAC_OS_PAGE_SETUP_PREFNAME, encodedData); } + +//------------------------------------------- +nsresult nsPrintSettingsMac::_Clone(nsIPrintSettings **_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + *_retval = nsnull; + + nsPrintSettingsMac *newSettings = new nsPrintSettingsMac(*this); + if (!newSettings) + return NS_ERROR_FAILURE; + *_retval = newSettings; + NS_ADDREF(*_retval); + return NS_OK; +} + +//------------------------------------------- +nsresult nsPrintSettingsMac::_Assign(nsIPrintSettings *aPS) +{ + nsPrintSettingsMac *printSettingsMac = dynamic_cast(aPS); + if (!printSettingsMac) + return NS_ERROR_UNEXPECTED; + *this = *printSettingsMac; + return NS_OK; +} + diff --git a/mozilla/gfx/src/mac/nsPrintSettingsMac.h b/mozilla/gfx/src/mac/nsPrintSettingsMac.h index 30a76607589..619464d4fdb 100644 --- a/mozilla/gfx/src/mac/nsPrintSettingsMac.h +++ b/mozilla/gfx/src/mac/nsPrintSettingsMac.h @@ -46,6 +46,11 @@ public: nsresult Init(); protected: + nsPrintSettingsMac(const nsPrintSettingsMac& src); + nsPrintSettingsMac& operator=(const nsPrintSettingsMac& rhs); + + nsresult _Clone(nsIPrintSettings **_retval); + nsresult _Assign(nsIPrintSettings *aPS); THPrint mPrintRecord; diff --git a/mozilla/gfx/src/mac/nsPrintSettingsX.cpp b/mozilla/gfx/src/mac/nsPrintSettingsX.cpp index ae64278059d..263159b3ef9 100644 --- a/mozilla/gfx/src/mac/nsPrintSettingsX.cpp +++ b/mozilla/gfx/src/mac/nsPrintSettingsX.cpp @@ -65,6 +65,16 @@ nsPrintSettingsX::nsPrintSettingsX() : NS_INIT_REFCNT(); } +/** --------------------------------------------------- + */ +nsPrintSettingsX::nsPrintSettingsX(const nsPrintSettingsX& src) : + mPageFormat(kPMNoPageFormat), + mPrintSettings(kPMNoPrintSettings) +{ + NS_INIT_REFCNT(); + *this = src; +} + /** --------------------------------------------------- */ nsPrintSettingsX::~nsPrintSettingsX() @@ -75,6 +85,53 @@ nsPrintSettingsX::~nsPrintSettingsX() } } +/** --------------------------------------------------- + */ +nsPrintSettingsX& nsPrintSettingsX::operator=(const nsPrintSettingsX& rhs) +{ + if (this == &rhs) { + return *this; + } + + nsPrintSettings::operator=(rhs); + + OSStatus status; + + if (mPageFormat != kPMNoPageFormat) { + ::PMDisposePageFormat(mPageFormat); + mPageFormat = kPMNoPageFormat; + } + if (rhs.mPageFormat != kPMNoPageFormat) { + PMPageFormat pageFormat; + status = ::PMNewPageFormat(&pageFormat); + if (status == noErr) { + status = ::PMCopyPageFormat(rhs.mPageFormat, pageFormat); + if (status == noErr) + mPageFormat = pageFormat; + else + ::PMDisposePageFormat(pageFormat); + } + } + + if (mPrintSettings != kPMNoPrintSettings) { + ::PMDisposePrintSettings(mPrintSettings); + mPrintSettings = kPMNoPrintSettings; + } + if (rhs.mPrintSettings != kPMNoPrintSettings) { + PMPrintSettings printSettings; + status = ::PMNewPrintSettings(&printSettings); + if (status == noErr) { + status = ::PMCopyPrintSettings(rhs.mPrintSettings, printSettings); + if (status == noErr) + mPrintSettings = printSettings; + else + ::PMDisposePrintSettings(printSettings); + } + } + + return *this; +} + /** --------------------------------------------------- */ nsresult nsPrintSettingsX::Init() @@ -252,3 +309,29 @@ NS_IMETHODIMP nsPrintSettingsX::WritePageFormatToPrefs() return prefBranch->SetCharPref(MAC_OS_X_PAGE_SETUP_PREFNAME, encodedData); } + +//------------------------------------------- +nsresult nsPrintSettingsX::_Clone(nsIPrintSettings **_retval) +{ + NS_ENSURE_ARG_POINTER(_retval); + *_retval = nsnull; + + nsPrintSettingsX *newSettings = new nsPrintSettingsX(*this); + if (!newSettings) + return NS_ERROR_FAILURE; + *_retval = newSettings; + NS_ADDREF(*_retval); + return NS_OK; +} + + +//------------------------------------------- +NS_IMETHODIMP nsPrintSettingsX::_Assign(nsIPrintSettings *aPS) +{ + nsPrintSettingsX *printSettingsX = dynamic_cast(aPS); + if (!printSettingsX) + return NS_ERROR_UNEXPECTED; + *this = *printSettingsX; + return NS_OK; +} + diff --git a/mozilla/gfx/src/mac/nsPrintSettingsX.h b/mozilla/gfx/src/mac/nsPrintSettingsX.h index 12c3e709ead..f8fc67b7a95 100644 --- a/mozilla/gfx/src/mac/nsPrintSettingsX.h +++ b/mozilla/gfx/src/mac/nsPrintSettingsX.h @@ -43,6 +43,12 @@ public: nsresult Init(); protected: + nsPrintSettingsX(const nsPrintSettingsX& src); + nsPrintSettingsX& operator=(const nsPrintSettingsX& rhs); + + nsresult _Clone(nsIPrintSettings **_retval); + nsresult _Assign(nsIPrintSettings *aPS); + PMPageFormat mPageFormat; PMPrintSettings mPrintSettings; }; diff --git a/mozilla/gfx/src/nsPrintOptionsImpl.cpp b/mozilla/gfx/src/nsPrintOptionsImpl.cpp index 44442aaa6a2..799ce1b88ff 100644 --- a/mozilla/gfx/src/nsPrintOptionsImpl.cpp +++ b/mozilla/gfx/src/nsPrintOptionsImpl.cpp @@ -840,8 +840,7 @@ NS_IMETHODIMP nsPrintOptions::GetNativeData(PRInt16 aDataType, void * *_retval) return NS_ERROR_NOT_IMPLEMENTED; } -/* nsIPrintSettings CreatePrintSettings (); */ -NS_IMETHODIMP nsPrintOptions::CreatePrintSettings(nsIPrintSettings **_retval) +nsresult nsPrintOptions::_CreatePrintSettings(nsIPrintSettings **_retval) { nsresult rv = NS_OK; nsPrintSettings* printSettings = new nsPrintSettings(); // does not initially ref count @@ -855,6 +854,12 @@ NS_IMETHODIMP nsPrintOptions::CreatePrintSettings(nsIPrintSettings **_retval) return rv; } +/* nsIPrintSettings CreatePrintSettings (); */ +NS_IMETHODIMP nsPrintOptions::CreatePrintSettings(nsIPrintSettings **_retval) +{ + return _CreatePrintSettings(_retval); +} + //----------------------------------------------------- //----------------------------------------------------- //-- nsIPrintSettingsService diff --git a/mozilla/gfx/src/nsPrintOptionsImpl.h b/mozilla/gfx/src/nsPrintOptionsImpl.h index a257b24d6db..509d9b74986 100644 --- a/mozilla/gfx/src/nsPrintOptionsImpl.h +++ b/mozilla/gfx/src/nsPrintOptionsImpl.h @@ -60,6 +60,9 @@ protected: virtual nsresult WritePrefs(nsIPrintSettings* aPS, const nsString& aPrefName, PRUint32 aFlags); const char* GetPrefName(const char * aPrefName, const nsString& aPrinterName); + + // May be implemented by the platform-specific derived class + virtual nsresult _CreatePrintSettings(nsIPrintSettings **_retval); // Members nsCOMPtr mGlobalPrintSettings; diff --git a/mozilla/gfx/src/nsPrintSettingsImpl.cpp b/mozilla/gfx/src/nsPrintSettingsImpl.cpp index bddad838087..f69d68c8ce5 100644 --- a/mozilla/gfx/src/nsPrintSettingsImpl.cpp +++ b/mozilla/gfx/src/nsPrintSettingsImpl.cpp @@ -95,40 +95,11 @@ nsPrintSettings::nsPrintSettings() : * See documentation in nsPrintSettingsImpl.h * @update 6/21/00 dwc */ -nsPrintSettings::nsPrintSettings(const nsPrintSettings* aPS) : - mPrintOptions(aPS->mPrintOptions), - mPrintRange(aPS->mPrintRange), - mStartPageNum(aPS->mStartPageNum), - mEndPageNum(aPS->mEndPageNum), - mScaling(aPS->mScaling), - mPrintBGColors(aPS->mPrintBGColors), - mPrintBGImages(aPS->mPrintBGImages), - mPrintFrameTypeUsage(aPS->mPrintFrameTypeUsage), - mPrintFrameType(aPS->mPrintFrameType), - mHowToEnableFrameUI(aPS->mHowToEnableFrameUI), - mIsCancelled(aPS->mIsCancelled), - mPrintSilent(aPS->mPrintSilent), - mPrintPreview(aPS->mPrintPreview), - mShrinkToFit(aPS->mShrinkToFit), - mPrintPageDelay(aPS->mPrintPageDelay), - mPaperData(aPS->mPaperData), - mPaperSizeType(aPS->mPaperSizeType), - mPaperWidth(aPS->mPaperWidth), - mPaperHeight(aPS->mPaperHeight), - mPaperSizeUnit(aPS->mPaperSizeUnit), - mPrintReversed(aPS->mPrintReversed), - mPrintInColor(aPS->mPrintInColor), - mOrientation(aPS->mOrientation), - mNumCopies(aPS->mNumCopies), - mPrintToFile(aPS->mPrintToFile), - mMargin(aPS->mMargin) +nsPrintSettings::nsPrintSettings(const nsPrintSettings& aPS) { NS_INIT_ISUPPORTS(); - for (PRInt32 i=0;i<3;i++) { - mHeaderStrs[i] = aPS->mHeaderStrs[i]; - mFooterStrs[i] = aPS->mFooterStrs[i]; - } + *this = aPS; } /** --------------------------------------------------- @@ -227,8 +198,12 @@ NS_IMETHODIMP nsPrintSettings::GetPrinterName(PRUnichar * *aPrinter) } NS_IMETHODIMP nsPrintSettings::SetPrinterName(const PRUnichar * aPrinter) { - mPrinter = aPrinter; - return NS_OK; + if (aPrinter) { + mPrinter = aPrinter; + } else { + mPrinter.SetLength(0); + } + return NS_OK; } /* attribute long numCopies; */ @@ -253,7 +228,11 @@ NS_IMETHODIMP nsPrintSettings::GetPrintCommand(PRUnichar * *aPrintCommand) } NS_IMETHODIMP nsPrintSettings::SetPrintCommand(const PRUnichar * aPrintCommand) { - mPrintCommand = aPrintCommand; + if (aPrintCommand) { + mPrintCommand = aPrintCommand; + } else { + mPrintCommand.SetLength(0); + } return NS_OK; } @@ -279,7 +258,11 @@ NS_IMETHODIMP nsPrintSettings::GetToFileName(PRUnichar * *aToFileName) } NS_IMETHODIMP nsPrintSettings::SetToFileName(const PRUnichar * aToFileName) { - mToFileName = aToFileName; + if (aToFileName) { + mToFileName = aToFileName; + } else { + mToFileName.SetLength(0); + } return NS_OK; } @@ -413,8 +396,11 @@ NS_IMETHODIMP nsPrintSettings::GetTitle(PRUnichar * *aTitle) } NS_IMETHODIMP nsPrintSettings::SetTitle(const PRUnichar * aTitle) { - NS_ENSURE_ARG_POINTER(aTitle); - mTitle = aTitle; + if (aTitle) { + mTitle = aTitle; + } else { + mTitle.SetLength(0); + } return NS_OK; } @@ -431,8 +417,11 @@ NS_IMETHODIMP nsPrintSettings::GetDocURL(PRUnichar * *aDocURL) } NS_IMETHODIMP nsPrintSettings::SetDocURL(const PRUnichar * aDocURL) { - NS_ENSURE_ARG_POINTER(aDocURL); - mURL = aDocURL; + if (aDocURL) { + mURL = aDocURL; + } else { + mURL.SetLength(0); + } return NS_OK; } @@ -659,8 +648,11 @@ NS_IMETHODIMP nsPrintSettings::GetPaperName(PRUnichar * *aPaperName) } NS_IMETHODIMP nsPrintSettings::SetPaperName(const PRUnichar * aPaperName) { - NS_ENSURE_ARG_POINTER(aPaperName); - mPaperName = aPaperName; + if (aPaperName) { + mPaperName = aPaperName; + } else { + mPaperName.SetLength(0); + } return NS_OK; } @@ -796,9 +788,9 @@ nsPrintSettings::GetPageSizeInTwips(PRInt32 *aWidth, PRInt32 *aHeight) } nsresult -nsPrintSettings::CloneObj(nsIPrintSettings **_retval) +nsPrintSettings::_Clone(nsIPrintSettings **_retval) { - nsPrintSettings* printSettings = new nsPrintSettings(this); + nsPrintSettings* printSettings = new nsPrintSettings(*this); return printSettings->QueryInterface(NS_GET_IID(nsIPrintSettings), (void**)_retval); // ref counts } @@ -806,5 +798,72 @@ nsPrintSettings::CloneObj(nsIPrintSettings **_retval) NS_IMETHODIMP nsPrintSettings::Clone(nsIPrintSettings **_retval) { - return CloneObj(_retval); + NS_ENSURE_ARG_POINTER(_retval); + return _Clone(_retval); } + +/* void assign (in nsIPrintSettings aPS); */ +nsresult +nsPrintSettings::_Assign(nsIPrintSettings *aPS) +{ + nsPrintSettings *ps = NS_STATIC_CAST(nsPrintSettings*, aPS); + *this = *ps; + return NS_OK; +} + +/* void assign (in nsIPrintSettings aPS); */ +NS_IMETHODIMP +nsPrintSettings::Assign(nsIPrintSettings *aPS) +{ + NS_ENSURE_ARG(aPS); + return _Assign(aPS); +} + +//------------------------------------------- +nsPrintSettings& nsPrintSettings::operator=(const nsPrintSettings& rhs) +{ + if (this == &rhs) { + return *this; + } + + mStartPageNum = rhs.mStartPageNum; + mEndPageNum = rhs.mEndPageNum; + mMargin = rhs.mMargin; + mScaling = rhs.mScaling; + mPrintBGColors = rhs.mPrintBGColors; + mPrintBGImages = rhs.mPrintBGImages; + mPrintRange = rhs.mPrintRange; + mTitle = rhs.mTitle; + mURL = rhs.mURL; + mHowToEnableFrameUI = rhs.mHowToEnableFrameUI; + mIsCancelled = rhs.mIsCancelled; + mPrintFrameTypeUsage = rhs.mPrintFrameTypeUsage; + mPrintFrameType = rhs.mPrintFrameType; + mPrintSilent = rhs.mPrintSilent; + mShrinkToFit = rhs.mShrinkToFit; + mShowPrintProgress = rhs.mShowPrintProgress; + mPaperName = rhs.mPaperName; + mPaperSizeType = rhs.mPaperSizeType; + mPaperData = rhs.mPaperData; + mPaperWidth = rhs.mPaperWidth; + mPaperHeight = rhs.mPaperHeight; + mPaperSizeUnit = rhs.mPaperSizeUnit; + mPrintReversed = rhs.mPrintReversed; + mPrintInColor = rhs.mPrintInColor; + mPaperSize = rhs.mPaperSize; + mOrientation = rhs.mOrientation; + mPrintCommand = rhs.mPrintCommand; + mNumCopies = rhs.mNumCopies; + mPrinter = rhs.mPrinter; + mPrintToFile = rhs.mPrintToFile; + mToFileName = rhs.mToFileName; + mPrintPageDelay = rhs.mPrintPageDelay; + + for (PRInt32 i=0;imDeviceName) mDeviceName = nsCRT::strdup(aPS->mDeviceName); - if (aPS->mDriverName) mDriverName = nsCRT::strdup(aPS->mDriverName); - - if (aPS->mDevMode) { - size_t size = sizeof(*aPS->mDevMode); - mDevMode = (LPDEVMODE)malloc(size); - memcpy(mDevMode, aPS->mDevMode, size); - } + *this = aPS; } /** --------------------------------------------------- @@ -81,8 +73,8 @@ nsPrintSettingsWin::nsPrintSettingsWin(const nsPrintSettingsWin* aPS) : */ nsPrintSettingsWin::~nsPrintSettingsWin() { - if (mDeviceName) nsCRT::free(mDeviceName); - if (mDriverName) nsCRT::free(mDriverName); + if (mDeviceName) nsMemory::Free(mDeviceName); + if (mDriverName) nsMemory::Free(mDriverName); if (mDevMode) free(mDevMode); } @@ -90,7 +82,7 @@ nsPrintSettingsWin::~nsPrintSettingsWin() NS_IMETHODIMP nsPrintSettingsWin::SetDeviceName(char * aDeviceName) { if (mDeviceName) { - nsCRT::free(mDeviceName); + nsMemory::Free(mDeviceName); } mDeviceName = aDeviceName?nsCRT::strdup(aDeviceName):nsnull; return NS_OK; @@ -106,7 +98,7 @@ NS_IMETHODIMP nsPrintSettingsWin::GetDeviceName(char * *aDeviceName) NS_IMETHODIMP nsPrintSettingsWin::SetDriverName(char * aDriverName) { if (mDriverName) { - nsCRT::free(mDriverName); + nsMemory::Free(mDriverName); } mDriverName = aDriverName?nsCRT::strdup(aDriverName):nsnull; return NS_OK; @@ -132,6 +124,7 @@ NS_IMETHODIMP nsPrintSettingsWin::GetDevMode(DEVMODE * *aDevMode) } return NS_OK; } + NS_IMETHODIMP nsPrintSettingsWin::SetDevMode(DEVMODE * aDevMode) { if (mDevMode) { @@ -147,10 +140,127 @@ NS_IMETHODIMP nsPrintSettingsWin::SetDevMode(DEVMODE * aDevMode) return NS_OK; } -/* nsIPrintSettings clone (); */ +//------------------------------------------- nsresult -nsPrintSettingsWin::CloneObj(nsIPrintSettings **_retval) +nsPrintSettingsWin::_Clone(nsIPrintSettings **_retval) { - nsPrintSettingsWin* printSettings = new nsPrintSettingsWin(this); + nsPrintSettingsWin* printSettings = new nsPrintSettingsWin(*this); return printSettings->QueryInterface(NS_GET_IID(nsIPrintSettings), (void**)_retval); // ref counts } + +//------------------------------------------- +nsPrintSettingsWin& nsPrintSettingsWin::operator=(const nsPrintSettingsWin& rhs) +{ + if (this == &rhs) { + return *this; + } + + ((nsPrintSettings&) *this) = rhs; + + if (mDeviceName) { + nsCRT::free(mDeviceName); + } + + if (mDriverName) { + nsCRT::free(mDriverName); + } + + // Use free because we used the native malloc to create the memory + if (mDevMode) { + free(mDevMode); + } + + mDeviceName = rhs.mDeviceName?nsCRT::strdup(rhs.mDeviceName):nsnull; + mDriverName = rhs.mDriverName?nsCRT::strdup(rhs.mDriverName):nsnull; + + if (rhs.mDevMode) { + size_t size = sizeof(*rhs.mDevMode); + mDevMode = (LPDEVMODE)malloc(size); + memcpy(mDevMode, rhs.mDevMode, size); + } else { + mDevMode = nsnull; + } + + return *this; +} + +//------------------------------------------- +/* void assign (in nsIPrintSettings aPS); */ +nsresult +nsPrintSettingsWin::_Assign(nsIPrintSettings *aPS) +{ + nsPrintSettingsWin *psWin = NS_STATIC_CAST(nsPrintSettingsWin*, aPS); + *this = *psWin; + return NS_OK; +} + +//---------------------------------------------------------------------- +// Testing of assign and clone +// This define turns on the testing module below +// so at start up it writes and reads the prefs. +#ifdef DEBUG_rodsX +#include "nsIPrintOptions.h" +#include "nsIServiceManager.h" +class Tester { +public: + Tester(); +}; +Tester::Tester() +{ + nsCOMPtr ps; + nsresult rv; + nsCOMPtr printService = do_GetService("@mozilla.org/gfx/printsettings-service;1", &rv); + if (NS_SUCCEEDED(rv)) { + rv = printService->CreatePrintSettings(getter_AddRefs(ps)); + } + + if (ps) { + ps->SetPrintOptions(nsIPrintSettings::kPrintOddPages, PR_TRUE); + ps->SetPrintOptions(nsIPrintSettings::kPrintEvenPages, PR_FALSE); + ps->SetMarginTop(1.0); + ps->SetMarginLeft(1.0); + ps->SetMarginBottom(1.0); + ps->SetMarginRight(1.0); + ps->SetScaling(0.5); + ps->SetPrintBGColors(PR_TRUE); + ps->SetPrintBGImages(PR_TRUE); + ps->SetPrintRange(15); + ps->SetHeaderStrLeft(NS_ConvertUTF8toUCS2("Left").get()); + ps->SetHeaderStrCenter(NS_ConvertUTF8toUCS2("Center").get()); + ps->SetHeaderStrRight(NS_ConvertUTF8toUCS2("Right").get()); + ps->SetFooterStrLeft(NS_ConvertUTF8toUCS2("Left").get()); + ps->SetFooterStrCenter(NS_ConvertUTF8toUCS2("Center").get()); + ps->SetFooterStrRight(NS_ConvertUTF8toUCS2("Right").get()); + ps->SetPaperName(NS_ConvertUTF8toUCS2("Paper Name").get()); + ps->SetPaperSizeType(10); + ps->SetPaperData(1); + ps->SetPaperWidth(100.0); + ps->SetPaperHeight(50.0); + ps->SetPaperSizeUnit(nsIPrintSettings::kPaperSizeMillimeters); + ps->SetPrintReversed(PR_TRUE); + ps->SetPrintInColor(PR_TRUE); + ps->SetPaperSize(5); + ps->SetOrientation(nsIPrintSettings::kLandscapeOrientation); + ps->SetPrintCommand(NS_ConvertUTF8toUCS2("Command").get()); + ps->SetNumCopies(2); + ps->SetPrinterName(NS_ConvertUTF8toUCS2("Printer Name").get()); + ps->SetPrintToFile(PR_TRUE); + ps->SetToFileName(NS_ConvertUTF8toUCS2("File Name").get()); + ps->SetPrintPageDelay(1000); + + nsCOMPtr ps2; + if (NS_SUCCEEDED(rv)) { + rv = printService->CreatePrintSettings(getter_AddRefs(ps2)); + } + + ps2->Assign(ps); + + nsCOMPtr psClone; + ps2->Clone(getter_AddRefs(psClone)); + + } + +} +Tester gTester; +#endif + diff --git a/mozilla/gfx/src/windows/nsPrintSettingsWin.h b/mozilla/gfx/src/windows/nsPrintSettingsWin.h index 150e70c9be9..3a063afe977 100644 --- a/mozilla/gfx/src/windows/nsPrintSettingsWin.h +++ b/mozilla/gfx/src/windows/nsPrintSettingsWin.h @@ -39,13 +39,23 @@ public: NS_DECL_NSIPRINTSETTINGSWIN nsPrintSettingsWin(); - nsPrintSettingsWin(const nsPrintSettingsWin* aPS); + nsPrintSettingsWin(const nsPrintSettingsWin& aPS); virtual ~nsPrintSettingsWin(); /** * Makes a new copy */ - virtual nsresult CloneObj(nsIPrintSettings **_retval); + virtual nsresult _Clone(nsIPrintSettings **_retval); + + /** + * Assigns values + */ + virtual nsresult _Assign(nsIPrintSettings* aPS); + + /** + * Assignment + */ + nsPrintSettingsWin& operator=(const nsPrintSettingsWin& rhs); protected: char* mDeviceName;