summaryrefslogtreecommitdiffstats
path: root/widget/nsPrintSettingsImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'widget/nsPrintSettingsImpl.cpp')
-rw-r--r--widget/nsPrintSettingsImpl.cpp1019
1 files changed, 1019 insertions, 0 deletions
diff --git a/widget/nsPrintSettingsImpl.cpp b/widget/nsPrintSettingsImpl.cpp
new file mode 100644
index 000000000..48cce8625
--- /dev/null
+++ b/widget/nsPrintSettingsImpl.cpp
@@ -0,0 +1,1019 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsPrintSettingsImpl.h"
+#include "nsReadableUtils.h"
+#include "nsIPrintSession.h"
+#include "mozilla/RefPtr.h"
+
+#define DEFAULT_MARGIN_WIDTH 0.5
+
+NS_IMPL_ISUPPORTS(nsPrintSettings, nsIPrintSettings)
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintSettingsImpl.h
+ * @update 6/21/00 dwc
+ */
+nsPrintSettings::nsPrintSettings() :
+ mPrintOptions(0L),
+ mPrintRange(kRangeAllPages),
+ mStartPageNum(1),
+ mEndPageNum(1),
+ mScaling(1.0),
+ mPrintBGColors(false),
+ mPrintBGImages(false),
+ mPrintFrameTypeUsage(kUseInternalDefault),
+ mPrintFrameType(kFramesAsIs),
+ mHowToEnableFrameUI(kFrameEnableNone),
+ mIsCancelled(false),
+ mPrintSilent(false),
+ mPrintPreview(false),
+ mShrinkToFit(true),
+ mShowPrintProgress(true),
+ mPrintPageDelay(50),
+ mPaperData(0),
+ mPaperWidth(8.5),
+ mPaperHeight(11.0),
+ mPaperSizeUnit(kPaperSizeInches),
+ mPrintReversed(false),
+ mPrintInColor(true),
+ mOrientation(kPortraitOrientation),
+ mNumCopies(1),
+ mPrintToFile(false),
+ mOutputFormat(kOutputFormatNative),
+ mIsInitedFromPrinter(false),
+ mIsInitedFromPrefs(false)
+{
+
+ /* member initializers and constructor code */
+ int32_t marginWidth = NS_INCHES_TO_INT_TWIPS(DEFAULT_MARGIN_WIDTH);
+ mMargin.SizeTo(marginWidth, marginWidth, marginWidth, marginWidth);
+ mEdge.SizeTo(0, 0, 0, 0);
+ mUnwriteableMargin.SizeTo(0,0,0,0);
+
+ mPrintOptions = kPrintOddPages | kPrintEvenPages;
+
+ mHeaderStrs[0].AssignLiteral("&T");
+ mHeaderStrs[2].AssignLiteral("&U");
+
+ mFooterStrs[0].AssignLiteral("&PT"); // Use &P (Page Num Only) or &PT (Page Num of Page Total)
+ mFooterStrs[2].AssignLiteral("&D");
+
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintSettingsImpl.h
+ * @update 6/21/00 dwc
+ */
+nsPrintSettings::nsPrintSettings(const nsPrintSettings& aPS)
+{
+ *this = aPS;
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintSettingsImpl.h
+ * @update 6/21/00 dwc
+ */
+nsPrintSettings::~nsPrintSettings()
+{
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintSession(nsIPrintSession **aPrintSession)
+{
+ NS_ENSURE_ARG_POINTER(aPrintSession);
+ *aPrintSession = nullptr;
+
+ nsCOMPtr<nsIPrintSession> session = do_QueryReferent(mSession);
+ if (!session)
+ return NS_ERROR_NOT_INITIALIZED;
+ *aPrintSession = session;
+ NS_ADDREF(*aPrintSession);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintSession(nsIPrintSession *aPrintSession)
+{
+ // Clearing it by passing nullptr is not allowed. That's why we
+ // use a weak ref so that it doesn't have to be cleared.
+ NS_ENSURE_ARG(aPrintSession);
+
+ mSession = do_GetWeakReference(aPrintSession);
+ if (!mSession) {
+ // This may happen if the implementation of this object does
+ // not support weak references - programmer error.
+ NS_ERROR("Could not get a weak reference from aPrintSession");
+ return NS_ERROR_FAILURE;
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetStartPageRange(int32_t *aStartPageRange)
+{
+ //NS_ENSURE_ARG_POINTER(aStartPageRange);
+ *aStartPageRange = mStartPageNum;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetStartPageRange(int32_t aStartPageRange)
+{
+ mStartPageNum = aStartPageRange;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetEndPageRange(int32_t *aEndPageRange)
+{
+ //NS_ENSURE_ARG_POINTER(aEndPageRange);
+ *aEndPageRange = mEndPageNum;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetEndPageRange(int32_t aEndPageRange)
+{
+ mEndPageNum = aEndPageRange;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintReversed(bool *aPrintReversed)
+{
+ //NS_ENSURE_ARG_POINTER(aPrintReversed);
+ *aPrintReversed = mPrintReversed;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintReversed(bool aPrintReversed)
+{
+ mPrintReversed = aPrintReversed;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintInColor(bool *aPrintInColor)
+{
+ //NS_ENSURE_ARG_POINTER(aPrintInColor);
+ *aPrintInColor = mPrintInColor;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintInColor(bool aPrintInColor)
+{
+ mPrintInColor = aPrintInColor;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetOrientation(int32_t *aOrientation)
+{
+ NS_ENSURE_ARG_POINTER(aOrientation);
+ *aOrientation = mOrientation;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetOrientation(int32_t aOrientation)
+{
+ mOrientation = aOrientation;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetResolution(int32_t *aResolution)
+{
+ NS_ENSURE_ARG_POINTER(aResolution);
+ *aResolution = mResolution;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetResolution(const int32_t aResolution)
+{
+ mResolution = aResolution;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetDuplex(int32_t *aDuplex)
+{
+ NS_ENSURE_ARG_POINTER(aDuplex);
+ *aDuplex = mDuplex;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetDuplex(const int32_t aDuplex)
+{
+ mDuplex = aDuplex;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrinterName(char16_t * *aPrinter)
+{
+ NS_ENSURE_ARG_POINTER(aPrinter);
+
+ *aPrinter = ToNewUnicode(mPrinter);
+ NS_ENSURE_TRUE(*aPrinter, NS_ERROR_OUT_OF_MEMORY);
+
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::SetPrinterName(const char16_t * aPrinter)
+{
+ if (!aPrinter || !mPrinter.Equals(aPrinter)) {
+ mIsInitedFromPrinter = false;
+ mIsInitedFromPrefs = false;
+ }
+
+ mPrinter.Assign(aPrinter);
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetNumCopies(int32_t *aNumCopies)
+{
+ NS_ENSURE_ARG_POINTER(aNumCopies);
+ *aNumCopies = mNumCopies;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetNumCopies(int32_t aNumCopies)
+{
+ mNumCopies = aNumCopies;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintToFile(bool *aPrintToFile)
+{
+ //NS_ENSURE_ARG_POINTER(aPrintToFile);
+ *aPrintToFile = mPrintToFile;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintToFile(bool aPrintToFile)
+{
+ mPrintToFile = aPrintToFile;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetToFileName(char16_t * *aToFileName)
+{
+ //NS_ENSURE_ARG_POINTER(aToFileName);
+ *aToFileName = ToNewUnicode(mToFileName);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetToFileName(const char16_t * aToFileName)
+{
+ if (aToFileName) {
+ mToFileName = aToFileName;
+ } else {
+ mToFileName.SetLength(0);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetOutputFormat(int16_t *aOutputFormat)
+{
+ NS_ENSURE_ARG_POINTER(aOutputFormat);
+ *aOutputFormat = mOutputFormat;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetOutputFormat(int16_t aOutputFormat)
+{
+ mOutputFormat = aOutputFormat;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintPageDelay(int32_t *aPrintPageDelay)
+{
+ *aPrintPageDelay = mPrintPageDelay;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintPageDelay(int32_t aPrintPageDelay)
+{
+ mPrintPageDelay = aPrintPageDelay;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetIsInitializedFromPrinter(bool *aIsInitializedFromPrinter)
+{
+ NS_ENSURE_ARG_POINTER(aIsInitializedFromPrinter);
+ *aIsInitializedFromPrinter = (bool)mIsInitedFromPrinter;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetIsInitializedFromPrinter(bool aIsInitializedFromPrinter)
+{
+ mIsInitedFromPrinter = (bool)aIsInitializedFromPrinter;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetIsInitializedFromPrefs(bool *aInitializedFromPrefs)
+{
+ NS_ENSURE_ARG_POINTER(aInitializedFromPrefs);
+ *aInitializedFromPrefs = (bool)mIsInitedFromPrefs;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetIsInitializedFromPrefs(bool aInitializedFromPrefs)
+{
+ mIsInitedFromPrefs = (bool)aInitializedFromPrefs;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetMarginTop(double *aMarginTop)
+{
+ NS_ENSURE_ARG_POINTER(aMarginTop);
+ *aMarginTop = NS_TWIPS_TO_INCHES(mMargin.top);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetMarginTop(double aMarginTop)
+{
+ mMargin.top = NS_INCHES_TO_INT_TWIPS(float(aMarginTop));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetMarginLeft(double *aMarginLeft)
+{
+ NS_ENSURE_ARG_POINTER(aMarginLeft);
+ *aMarginLeft = NS_TWIPS_TO_INCHES(mMargin.left);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetMarginLeft(double aMarginLeft)
+{
+ mMargin.left = NS_INCHES_TO_INT_TWIPS(float(aMarginLeft));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetMarginBottom(double *aMarginBottom)
+{
+ NS_ENSURE_ARG_POINTER(aMarginBottom);
+ *aMarginBottom = NS_TWIPS_TO_INCHES(mMargin.bottom);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetMarginBottom(double aMarginBottom)
+{
+ mMargin.bottom = NS_INCHES_TO_INT_TWIPS(float(aMarginBottom));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetMarginRight(double *aMarginRight)
+{
+ NS_ENSURE_ARG_POINTER(aMarginRight);
+ *aMarginRight = NS_TWIPS_TO_INCHES(mMargin.right);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetMarginRight(double aMarginRight)
+{
+ mMargin.right = NS_INCHES_TO_INT_TWIPS(float(aMarginRight));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetEdgeTop(double *aEdgeTop)
+{
+ NS_ENSURE_ARG_POINTER(aEdgeTop);
+ *aEdgeTop = NS_TWIPS_TO_INCHES(mEdge.top);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetEdgeTop(double aEdgeTop)
+{
+ mEdge.top = NS_INCHES_TO_INT_TWIPS(float(aEdgeTop));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetEdgeLeft(double *aEdgeLeft)
+{
+ NS_ENSURE_ARG_POINTER(aEdgeLeft);
+ *aEdgeLeft = NS_TWIPS_TO_INCHES(mEdge.left);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetEdgeLeft(double aEdgeLeft)
+{
+ mEdge.left = NS_INCHES_TO_INT_TWIPS(float(aEdgeLeft));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetEdgeBottom(double *aEdgeBottom)
+{
+ NS_ENSURE_ARG_POINTER(aEdgeBottom);
+ *aEdgeBottom = NS_TWIPS_TO_INCHES(mEdge.bottom);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetEdgeBottom(double aEdgeBottom)
+{
+ mEdge.bottom = NS_INCHES_TO_INT_TWIPS(float(aEdgeBottom));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetEdgeRight(double *aEdgeRight)
+{
+ NS_ENSURE_ARG_POINTER(aEdgeRight);
+ *aEdgeRight = NS_TWIPS_TO_INCHES(mEdge.right);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetEdgeRight(double aEdgeRight)
+{
+ mEdge.right = NS_INCHES_TO_INT_TWIPS(float(aEdgeRight));
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetUnwriteableMarginTop(double *aUnwriteableMarginTop)
+{
+ NS_ENSURE_ARG_POINTER(aUnwriteableMarginTop);
+ *aUnwriteableMarginTop = NS_TWIPS_TO_INCHES(mUnwriteableMargin.top);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetUnwriteableMarginTop(double aUnwriteableMarginTop)
+{
+ if (aUnwriteableMarginTop >= 0.0) {
+ mUnwriteableMargin.top = NS_INCHES_TO_INT_TWIPS(aUnwriteableMarginTop);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetUnwriteableMarginLeft(double *aUnwriteableMarginLeft)
+{
+ NS_ENSURE_ARG_POINTER(aUnwriteableMarginLeft);
+ *aUnwriteableMarginLeft = NS_TWIPS_TO_INCHES(mUnwriteableMargin.left);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetUnwriteableMarginLeft(double aUnwriteableMarginLeft)
+{
+ if (aUnwriteableMarginLeft >= 0.0) {
+ mUnwriteableMargin.left = NS_INCHES_TO_INT_TWIPS(aUnwriteableMarginLeft);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetUnwriteableMarginBottom(double *aUnwriteableMarginBottom)
+{
+ NS_ENSURE_ARG_POINTER(aUnwriteableMarginBottom);
+ *aUnwriteableMarginBottom = NS_TWIPS_TO_INCHES(mUnwriteableMargin.bottom);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetUnwriteableMarginBottom(double aUnwriteableMarginBottom)
+{
+ if (aUnwriteableMarginBottom >= 0.0) {
+ mUnwriteableMargin.bottom = NS_INCHES_TO_INT_TWIPS(aUnwriteableMarginBottom);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetUnwriteableMarginRight(double *aUnwriteableMarginRight)
+{
+ NS_ENSURE_ARG_POINTER(aUnwriteableMarginRight);
+ *aUnwriteableMarginRight = NS_TWIPS_TO_INCHES(mUnwriteableMargin.right);
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetUnwriteableMarginRight(double aUnwriteableMarginRight)
+{
+ if (aUnwriteableMarginRight >= 0.0) {
+ mUnwriteableMargin.right = NS_INCHES_TO_INT_TWIPS(aUnwriteableMarginRight);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetScaling(double *aScaling)
+{
+ NS_ENSURE_ARG_POINTER(aScaling);
+ *aScaling = mScaling;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::SetScaling(double aScaling)
+{
+ mScaling = aScaling;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintBGColors(bool *aPrintBGColors)
+{
+ NS_ENSURE_ARG_POINTER(aPrintBGColors);
+ *aPrintBGColors = mPrintBGColors;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintBGColors(bool aPrintBGColors)
+{
+ mPrintBGColors = aPrintBGColors;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintBGImages(bool *aPrintBGImages)
+{
+ NS_ENSURE_ARG_POINTER(aPrintBGImages);
+ *aPrintBGImages = mPrintBGImages;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintBGImages(bool aPrintBGImages)
+{
+ mPrintBGImages = aPrintBGImages;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintRange(int16_t *aPrintRange)
+{
+ NS_ENSURE_ARG_POINTER(aPrintRange);
+ *aPrintRange = mPrintRange;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintRange(int16_t aPrintRange)
+{
+ mPrintRange = aPrintRange;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetTitle(char16_t * *aTitle)
+{
+ NS_ENSURE_ARG_POINTER(aTitle);
+ if (!mTitle.IsEmpty()) {
+ *aTitle = ToNewUnicode(mTitle);
+ } else {
+ *aTitle = nullptr;
+ }
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetTitle(const char16_t * aTitle)
+{
+ if (aTitle) {
+ mTitle = aTitle;
+ } else {
+ mTitle.SetLength(0);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetDocURL(char16_t * *aDocURL)
+{
+ NS_ENSURE_ARG_POINTER(aDocURL);
+ if (!mURL.IsEmpty()) {
+ *aDocURL = ToNewUnicode(mURL);
+ } else {
+ *aDocURL = nullptr;
+ }
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetDocURL(const char16_t * aDocURL)
+{
+ if (aDocURL) {
+ mURL = aDocURL;
+ } else {
+ mURL.SetLength(0);
+ }
+ return NS_OK;
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintSettingsImpl.h
+ * @update 1/12/01 rods
+ */
+NS_IMETHODIMP
+nsPrintSettings::GetPrintOptions(int32_t aType, bool *aTurnOnOff)
+{
+ NS_ENSURE_ARG_POINTER(aTurnOnOff);
+ *aTurnOnOff = mPrintOptions & aType ? true : false;
+ return NS_OK;
+}
+/** ---------------------------------------------------
+ * See documentation in nsPrintSettingsImpl.h
+ * @update 1/12/01 rods
+ */
+NS_IMETHODIMP
+nsPrintSettings::SetPrintOptions(int32_t aType, bool aTurnOnOff)
+{
+ if (aTurnOnOff) {
+ mPrintOptions |= aType;
+ } else {
+ mPrintOptions &= ~aType;
+ }
+ return NS_OK;
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintSettingsImpl.h
+ * @update 1/12/01 rods
+ */
+NS_IMETHODIMP
+nsPrintSettings::GetPrintOptionsBits(int32_t *aBits)
+{
+ NS_ENSURE_ARG_POINTER(aBits);
+ *aBits = mPrintOptions;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPrintSettings::SetPrintOptionsBits(int32_t aBits)
+{
+ mPrintOptions = aBits;
+ return NS_OK;
+}
+
+nsresult
+nsPrintSettings::GetMarginStrs(char16_t * *aTitle,
+ nsHeaderFooterEnum aType,
+ int16_t aJust)
+{
+ NS_ENSURE_ARG_POINTER(aTitle);
+ *aTitle = nullptr;
+ if (aType == eHeader) {
+ switch (aJust) {
+ case kJustLeft: *aTitle = ToNewUnicode(mHeaderStrs[0]);break;
+ case kJustCenter: *aTitle = ToNewUnicode(mHeaderStrs[1]);break;
+ case kJustRight: *aTitle = ToNewUnicode(mHeaderStrs[2]);break;
+ } //switch
+ } else {
+ switch (aJust) {
+ case kJustLeft: *aTitle = ToNewUnicode(mFooterStrs[0]);break;
+ case kJustCenter: *aTitle = ToNewUnicode(mFooterStrs[1]);break;
+ case kJustRight: *aTitle = ToNewUnicode(mFooterStrs[2]);break;
+ } //switch
+ }
+ return NS_OK;
+}
+
+nsresult
+nsPrintSettings::SetMarginStrs(const char16_t * aTitle,
+ nsHeaderFooterEnum aType,
+ int16_t aJust)
+{
+ NS_ENSURE_ARG_POINTER(aTitle);
+ if (aType == eHeader) {
+ switch (aJust) {
+ case kJustLeft: mHeaderStrs[0] = aTitle;break;
+ case kJustCenter: mHeaderStrs[1] = aTitle;break;
+ case kJustRight: mHeaderStrs[2] = aTitle;break;
+ } //switch
+ } else {
+ switch (aJust) {
+ case kJustLeft: mFooterStrs[0] = aTitle;break;
+ case kJustCenter: mFooterStrs[1] = aTitle;break;
+ case kJustRight: mFooterStrs[2] = aTitle;break;
+ } //switch
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetHeaderStrLeft(char16_t * *aTitle)
+{
+ return GetMarginStrs(aTitle, eHeader, kJustLeft);
+}
+NS_IMETHODIMP nsPrintSettings::SetHeaderStrLeft(const char16_t * aTitle)
+{
+ return SetMarginStrs(aTitle, eHeader, kJustLeft);
+}
+
+NS_IMETHODIMP nsPrintSettings::GetHeaderStrCenter(char16_t * *aTitle)
+{
+ return GetMarginStrs(aTitle, eHeader, kJustCenter);
+}
+NS_IMETHODIMP nsPrintSettings::SetHeaderStrCenter(const char16_t * aTitle)
+{
+ return SetMarginStrs(aTitle, eHeader, kJustCenter);
+}
+
+NS_IMETHODIMP nsPrintSettings::GetHeaderStrRight(char16_t * *aTitle)
+{
+ return GetMarginStrs(aTitle, eHeader, kJustRight);
+}
+NS_IMETHODIMP nsPrintSettings::SetHeaderStrRight(const char16_t * aTitle)
+{
+ return SetMarginStrs(aTitle, eHeader, kJustRight);
+}
+
+NS_IMETHODIMP nsPrintSettings::GetFooterStrLeft(char16_t * *aTitle)
+{
+ return GetMarginStrs(aTitle, eFooter, kJustLeft);
+}
+NS_IMETHODIMP nsPrintSettings::SetFooterStrLeft(const char16_t * aTitle)
+{
+ return SetMarginStrs(aTitle, eFooter, kJustLeft);
+}
+
+NS_IMETHODIMP nsPrintSettings::GetFooterStrCenter(char16_t * *aTitle)
+{
+ return GetMarginStrs(aTitle, eFooter, kJustCenter);
+}
+NS_IMETHODIMP nsPrintSettings::SetFooterStrCenter(const char16_t * aTitle)
+{
+ return SetMarginStrs(aTitle, eFooter, kJustCenter);
+}
+
+NS_IMETHODIMP nsPrintSettings::GetFooterStrRight(char16_t * *aTitle)
+{
+ return GetMarginStrs(aTitle, eFooter, kJustRight);
+}
+NS_IMETHODIMP nsPrintSettings::SetFooterStrRight(const char16_t * aTitle)
+{
+ return SetMarginStrs(aTitle, eFooter, kJustRight);
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintFrameTypeUsage(int16_t *aPrintFrameTypeUsage)
+{
+ NS_ENSURE_ARG_POINTER(aPrintFrameTypeUsage);
+ *aPrintFrameTypeUsage = mPrintFrameTypeUsage;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintFrameTypeUsage(int16_t aPrintFrameTypeUsage)
+{
+ mPrintFrameTypeUsage = aPrintFrameTypeUsage;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintFrameType(int16_t *aPrintFrameType)
+{
+ NS_ENSURE_ARG_POINTER(aPrintFrameType);
+ *aPrintFrameType = (int32_t)mPrintFrameType;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintFrameType(int16_t aPrintFrameType)
+{
+ mPrintFrameType = aPrintFrameType;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPrintSilent(bool *aPrintSilent)
+{
+ NS_ENSURE_ARG_POINTER(aPrintSilent);
+ *aPrintSilent = mPrintSilent;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPrintSilent(bool aPrintSilent)
+{
+ mPrintSilent = aPrintSilent;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetShrinkToFit(bool *aShrinkToFit)
+{
+ NS_ENSURE_ARG_POINTER(aShrinkToFit);
+ *aShrinkToFit = mShrinkToFit;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetShrinkToFit(bool aShrinkToFit)
+{
+ mShrinkToFit = aShrinkToFit;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetShowPrintProgress(bool *aShowPrintProgress)
+{
+ NS_ENSURE_ARG_POINTER(aShowPrintProgress);
+ *aShowPrintProgress = mShowPrintProgress;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetShowPrintProgress(bool aShowPrintProgress)
+{
+ mShowPrintProgress = aShowPrintProgress;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPaperName(char16_t * *aPaperName)
+{
+ NS_ENSURE_ARG_POINTER(aPaperName);
+ if (!mPaperName.IsEmpty()) {
+ *aPaperName = ToNewUnicode(mPaperName);
+ } else {
+ *aPaperName = nullptr;
+ }
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPaperName(const char16_t * aPaperName)
+{
+ if (aPaperName) {
+ mPaperName = aPaperName;
+ } else {
+ mPaperName.SetLength(0);
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetHowToEnableFrameUI(int16_t *aHowToEnableFrameUI)
+{
+ NS_ENSURE_ARG_POINTER(aHowToEnableFrameUI);
+ *aHowToEnableFrameUI = mHowToEnableFrameUI;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetHowToEnableFrameUI(int16_t aHowToEnableFrameUI)
+{
+ mHowToEnableFrameUI = aHowToEnableFrameUI;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetIsCancelled(bool *aIsCancelled)
+{
+ NS_ENSURE_ARG_POINTER(aIsCancelled);
+ *aIsCancelled = mIsCancelled;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetIsCancelled(bool aIsCancelled)
+{
+ mIsCancelled = aIsCancelled;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPaperWidth(double *aPaperWidth)
+{
+ NS_ENSURE_ARG_POINTER(aPaperWidth);
+ *aPaperWidth = mPaperWidth;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPaperWidth(double aPaperWidth)
+{
+ mPaperWidth = aPaperWidth;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPaperHeight(double *aPaperHeight)
+{
+ NS_ENSURE_ARG_POINTER(aPaperHeight);
+ *aPaperHeight = mPaperHeight;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPaperHeight(double aPaperHeight)
+{
+ mPaperHeight = aPaperHeight;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPaperSizeUnit(int16_t *aPaperSizeUnit)
+{
+ NS_ENSURE_ARG_POINTER(aPaperSizeUnit);
+ *aPaperSizeUnit = mPaperSizeUnit;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPaperSizeUnit(int16_t aPaperSizeUnit)
+{
+ mPaperSizeUnit = aPaperSizeUnit;
+ return NS_OK;
+}
+
+NS_IMETHODIMP nsPrintSettings::GetPaperData(int16_t *aPaperData)
+{
+ NS_ENSURE_ARG_POINTER(aPaperData);
+ *aPaperData = mPaperData;
+ return NS_OK;
+}
+NS_IMETHODIMP nsPrintSettings::SetPaperData(int16_t aPaperData)
+{
+ mPaperData = aPaperData;
+ return NS_OK;
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintOptionsImpl.h
+ * @update 6/21/00 dwc
+ * @update 1/12/01 rods
+ */
+NS_IMETHODIMP
+nsPrintSettings::SetMarginInTwips(nsIntMargin& aMargin)
+{
+ mMargin = aMargin;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPrintSettings::SetEdgeInTwips(nsIntMargin& aEdge)
+{
+ mEdge = aEdge;
+ return NS_OK;
+}
+
+// NOTE: Any subclass implementation of this function should make sure
+// to check for negative margin values in aUnwriteableMargin (which
+// would indicate that we should use the system default unwriteable margin.)
+NS_IMETHODIMP
+nsPrintSettings::SetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin)
+{
+ if (aUnwriteableMargin.top >= 0) {
+ mUnwriteableMargin.top = aUnwriteableMargin.top;
+ }
+ if (aUnwriteableMargin.left >= 0) {
+ mUnwriteableMargin.left = aUnwriteableMargin.left;
+ }
+ if (aUnwriteableMargin.bottom >= 0) {
+ mUnwriteableMargin.bottom = aUnwriteableMargin.bottom;
+ }
+ if (aUnwriteableMargin.right >= 0) {
+ mUnwriteableMargin.right = aUnwriteableMargin.right;
+ }
+ return NS_OK;
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintOptionsImpl.h
+ * @update 6/21/00 dwc
+ */
+NS_IMETHODIMP
+nsPrintSettings::GetMarginInTwips(nsIntMargin& aMargin)
+{
+ aMargin = mMargin;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPrintSettings::GetEdgeInTwips(nsIntMargin& aEdge)
+{
+ aEdge = mEdge;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPrintSettings::GetUnwriteableMarginInTwips(nsIntMargin& aUnwriteableMargin)
+{
+ aUnwriteableMargin = mUnwriteableMargin;
+ return NS_OK;
+}
+
+/** ---------------------------------------------------
+ * Stub - platform-specific implementations can use this function.
+ */
+NS_IMETHODIMP
+nsPrintSettings::SetupSilentPrinting()
+{
+ return NS_OK;
+}
+
+/** ---------------------------------------------------
+ * See documentation in nsPrintOptionsImpl.h
+ */
+NS_IMETHODIMP
+nsPrintSettings::GetEffectivePageSize(double *aWidth, double *aHeight)
+{
+ if (mPaperSizeUnit == kPaperSizeInches) {
+ *aWidth = NS_INCHES_TO_TWIPS(float(mPaperWidth));
+ *aHeight = NS_INCHES_TO_TWIPS(float(mPaperHeight));
+ } else {
+ *aWidth = NS_MILLIMETERS_TO_TWIPS(float(mPaperWidth));
+ *aHeight = NS_MILLIMETERS_TO_TWIPS(float(mPaperHeight));
+ }
+ if (kLandscapeOrientation == mOrientation) {
+ double temp = *aWidth;
+ *aWidth = *aHeight;
+ *aHeight = temp;
+ }
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPrintSettings::GetPageRanges(nsTArray<int32_t> &aPages)
+{
+ aPages.Clear();
+ return NS_OK;
+}
+
+nsresult
+nsPrintSettings::_Clone(nsIPrintSettings **_retval)
+{
+ RefPtr<nsPrintSettings> printSettings = new nsPrintSettings(*this);
+ printSettings.forget(_retval);
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsPrintSettings::Clone(nsIPrintSettings **_retval)
+{
+ NS_ENSURE_ARG_POINTER(_retval);
+ return _Clone(_retval);
+}
+
+nsresult
+nsPrintSettings::_Assign(nsIPrintSettings *aPS)
+{
+ nsPrintSettings *ps = static_cast<nsPrintSettings*>(aPS);
+ *this = *ps;
+ return NS_OK;
+}
+
+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;
+ mEdge = rhs.mEdge;
+ mUnwriteableMargin = rhs.mUnwriteableMargin;
+ 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;
+ mPaperData = rhs.mPaperData;
+ mPaperWidth = rhs.mPaperWidth;
+ mPaperHeight = rhs.mPaperHeight;
+ mPaperSizeUnit = rhs.mPaperSizeUnit;
+ mPrintReversed = rhs.mPrintReversed;
+ mPrintInColor = rhs.mPrintInColor;
+ mOrientation = rhs.mOrientation;
+ mNumCopies = rhs.mNumCopies;
+ mPrinter = rhs.mPrinter;
+ mPrintToFile = rhs.mPrintToFile;
+ mToFileName = rhs.mToFileName;
+ mOutputFormat = rhs.mOutputFormat;
+ mPrintPageDelay = rhs.mPrintPageDelay;
+
+ for (int32_t i=0;i<NUM_HEAD_FOOT;i++) {
+ mHeaderStrs[i] = rhs.mHeaderStrs[i];
+ mFooterStrs[i] = rhs.mFooterStrs[i];
+ }
+
+ return *this;
+}
+