diff --git a/widget/public/nsIPrintOptions.idl b/widget/public/nsIPrintOptions.idl index c2f38143831..5636f8afde3 100644 --- a/widget/public/nsIPrintOptions.idl +++ b/widget/public/nsIPrintOptions.idl @@ -63,12 +63,7 @@ interface nsIPrintOptions : nsISupports /* Print Option Flags for Bit Field*/ const long kOptPrintOddPages = 0x00000001; const long kOptPrintEvenPages = 0x00000002; - const long kOptPrintDocTitle = 0x00000004; - const long kOptPrintDocLoc = 0x00000008; - const long kOptPrintPageNums = 0x00000010; - const long kOptPrintPageTotal = 0x00000020; - const long kOptPrintDatePrinted = 0x00000040; - const long kPrintOptionsEnableSelectionRB = 0x00000080; + const long kPrintOptionsEnableSelectionRB = 0x00000004; /* Print Range Enums */ const long kRangeAllPages = 0; @@ -151,10 +146,18 @@ interface nsIPrintOptions : nsISupports attribute double marginRight; attribute short printRange; - attribute short pageNumJust; + attribute wstring title; attribute wstring docURL; + attribute wstring headerStrLeft; + attribute wstring headerStrCenter; + attribute wstring headerStrRight; + + attribute wstring footerStrLeft; + attribute wstring footerStrCenter; + attribute wstring footerStrRight; + attribute short howToEnableFrameUI; attribute short printFrameType; attribute boolean isCancelled; diff --git a/widget/src/xpwidgets/nsPrintOptionsImpl.cpp b/widget/src/xpwidgets/nsPrintOptionsImpl.cpp index 1899e4d2e66..1f19d7257e8 100644 --- a/widget/src/xpwidgets/nsPrintOptionsImpl.cpp +++ b/widget/src/xpwidgets/nsPrintOptionsImpl.cpp @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* ***** BEGIN LICENSE BLOCK ***** * Version: NPL 1.1/GPL 2.0/LGPL 2.1 * @@ -16,7 +16,7 @@ * * The Initial Developer of the Original Code is * Netscape Communications Corporation. - * Portions created by the Initial Developer are Copyright (C) 1998 + * Portions created by the Initial Developer are Copyright (C) 2000 * the Initial Developer. All Rights Reserved. * * Contributor(s): @@ -77,12 +77,12 @@ const char * kMarginRight = "print.print_margin_right"; // Prefs for Print Options const char * kPrintEvenPages = "print.print_evenpages"; const char * kPrintOddPages = "print.print_oddpages"; -const char * kPrintDocTitle = "print.print_doctitle"; -const char * kPrintDocLoc = "print.print_doclocation"; -const char * kPageNums = "print.print_pagenumbers"; -const char * kPageNumsJust = "print.print_pagenumjust"; -const char * kPrintPageTotals = "print.print_pagetotals"; -const char * kPrintDate = "print.print_date"; +const char * kPrintHeaderStr1 = "print.print_headerleft"; +const char * kPrintHeaderStr2 = "print.print_headercenter"; +const char * kPrintHeaderStr3 = "print.print_headerright"; +const char * kPrintFooterStr1 = "print.print_footerleft"; +const char * kPrintFooterStr2 = "print.print_footercenter"; +const char * kPrintFooterStr3 = "print.print_footerright"; // Additional Prefs const char * kPrintReversed = "print.print_reversed"; @@ -105,7 +105,7 @@ const char * kLeftJust = "left"; const char * kCenterJust = "center"; const char * kRightJust = "right"; -#define form_properties "chrome://communicator/locale/printing.properties" +nsFont* nsPrintOptions::mDefaultFont = nsnull; /** --------------------------------------------------- * See documentation in nsPrintOptionsImpl.h @@ -123,7 +123,6 @@ nsPrintOptions::nsPrintOptions() : mPrintToFile(PR_FALSE), mPrintFrameType(kFramesAsIs), mHowToEnableFrameUI(kFrameEnableNone), - mPageNumJust(kJustLeft), mIsCancelled(PR_FALSE), mPrintPageDelay(500), mPrintSilent(PR_FALSE) @@ -134,18 +133,21 @@ nsPrintOptions::nsPrintOptions() : nscoord halfInch = NS_INCHES_TO_TWIPS(0.5); mMargin.SizeTo(halfInch, halfInch, halfInch, halfInch); - mPrintOptions = kOptPrintOddPages | - kOptPrintEvenPages | - kOptPrintDocTitle | - kOptPrintDocLoc | - kOptPrintPageNums | - kOptPrintPageTotal | - kOptPrintDatePrinted; + mPrintOptions = kOptPrintOddPages | kOptPrintEvenPages; - mDefaultFont = new nsFont("Times", NS_FONT_STYLE_NORMAL,NS_FONT_VARIANT_NORMAL, - NS_FONT_WEIGHT_NORMAL,0,NSIntPointsToTwips(10)); + if (mDefaultFont == nsnull) { + mDefaultFont = new nsFont("Times", NS_FONT_STYLE_NORMAL,NS_FONT_VARIANT_NORMAL, + NS_FONT_WEIGHT_NORMAL,0,NSIntPointsToTwips(10)); + } + + mHeaderStrs[0].AssignWithConversion("&T"); + mHeaderStrs[2].AssignWithConversion("&U"); + + mFooterStrs[0].AssignWithConversion("&P"); // Use &P (Page Num Only) or &PT (Page Num of Page Total) + mFooterStrs[2].AssignWithConversion("&D"); ReadPrefs(); + } /** --------------------------------------------------- @@ -156,6 +158,7 @@ nsPrintOptions::~nsPrintOptions() { if (mDefaultFont != nsnull) { delete mDefaultFont; + mDefaultFont = nsnull; } } @@ -288,13 +291,13 @@ nsPrintOptions::ReadPrefs() ReadBitFieldPref(prefs, kPrintEvenPages, kOptPrintEvenPages); ReadBitFieldPref(prefs, kPrintOddPages, kOptPrintOddPages); - ReadBitFieldPref(prefs, kPrintDocTitle, kOptPrintDocTitle); - ReadBitFieldPref(prefs, kPrintDocLoc, kOptPrintDocLoc); - ReadBitFieldPref(prefs, kPageNums, kOptPrintPageNums); - ReadBitFieldPref(prefs, kPrintPageTotals, kOptPrintPageTotal); - ReadBitFieldPref(prefs, kPrintDate, kOptPrintDatePrinted); - ReadJustification(prefs, kPageNumsJust, mPageNumJust, kJustLeft); + ReadPrefString(prefs, kPrintHeaderStr1, mHeaderStrs[0]); + ReadPrefString(prefs, kPrintHeaderStr2, mHeaderStrs[1]); + ReadPrefString(prefs, kPrintHeaderStr3, mHeaderStrs[2]); + ReadPrefString(prefs, kPrintFooterStr1, mFooterStrs[0]); + ReadPrefString(prefs, kPrintFooterStr2, mFooterStrs[1]); + ReadPrefString(prefs, kPrintFooterStr3, mFooterStrs[2]); // Read Additional XP Prefs prefs->GetBoolPref(kPrintReversed, &mPrintReversed); @@ -327,13 +330,13 @@ nsPrintOptions::WritePrefs() WriteBitFieldPref(prefs, kPrintEvenPages, kOptPrintEvenPages); WriteBitFieldPref(prefs, kPrintOddPages, kOptPrintOddPages); - WriteBitFieldPref(prefs, kPrintDocTitle, kOptPrintDocTitle); - WriteBitFieldPref(prefs, kPrintDocLoc, kOptPrintDocLoc); - WriteBitFieldPref(prefs, kPageNums, kOptPrintPageNums); - WriteBitFieldPref(prefs, kPrintPageTotals, kOptPrintPageTotal); - WriteBitFieldPref(prefs, kPrintDate, kOptPrintDatePrinted); - WriteJustification(prefs, kPageNumsJust, mPageNumJust); + WritePrefString(prefs, kPrintHeaderStr1, mHeaderStrs[0]); + WritePrefString(prefs, kPrintHeaderStr2, mHeaderStrs[1]); + WritePrefString(prefs, kPrintHeaderStr3, mHeaderStrs[2]); + WritePrefString(prefs, kPrintFooterStr1, mFooterStrs[0]); + WritePrefString(prefs, kPrintFooterStr2, mFooterStrs[1]); + WritePrefString(prefs, kPrintFooterStr3, mFooterStrs[2]); // Write Additional XP Prefs prefs->SetBoolPref(kPrintReversed, mPrintReversed); @@ -544,19 +547,6 @@ NS_IMETHODIMP nsPrintOptions::SetPrintRange(PRInt16 aPrintRange) return NS_OK; } -/* attribute long pageNumJust; */ -NS_IMETHODIMP nsPrintOptions::GetPageNumJust(PRInt16 *aPageNumJust) -{ - NS_ENSURE_ARG_POINTER(aPageNumJust); - *aPageNumJust = mPageNumJust; - return NS_OK; -} -NS_IMETHODIMP nsPrintOptions::SetPageNumJust(PRInt16 aPageNumJust) -{ - mPageNumJust = aPageNumJust; - return NS_OK; -} - /* attribute wstring docTitle; */ NS_IMETHODIMP nsPrintOptions::GetTitle(PRUnichar * *aTitle) { @@ -585,6 +575,114 @@ NS_IMETHODIMP nsPrintOptions::SetDocURL(const PRUnichar * aDocURL) return NS_OK; } +/* attribute wstring docTitle; */ +nsresult +nsPrintOptions::GetMarginStrs(PRUnichar * *aTitle, + nsHeaderFooterEnum aType, + PRInt16 aJust) +{ + NS_ENSURE_ARG_POINTER(aTitle); + *aTitle = nsnull; + if (aType == eHeader) { + switch (aJust) { + case kJustLeft: *aTitle = mHeaderStrs[0].ToNewUnicode();break; + case kJustCenter: *aTitle = mHeaderStrs[1].ToNewUnicode();break; + case kJustRight: *aTitle = mHeaderStrs[2].ToNewUnicode();break; + } //switch + } else { + switch (aJust) { + case kJustLeft: *aTitle = mFooterStrs[0].ToNewUnicode();break; + case kJustCenter: *aTitle = mFooterStrs[1].ToNewUnicode();break; + case kJustRight: *aTitle = mFooterStrs[2].ToNewUnicode();break; + } //switch + } + return NS_OK; +} + +nsresult +nsPrintOptions::SetMarginStrs(const PRUnichar * aTitle, + nsHeaderFooterEnum aType, + PRInt16 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; +} + +/* attribute wstring Header String Left */ +NS_IMETHODIMP nsPrintOptions::GetHeaderStrLeft(PRUnichar * *aTitle) +{ + return GetMarginStrs(aTitle, eHeader, kJustLeft); +} +NS_IMETHODIMP nsPrintOptions::SetHeaderStrLeft(const PRUnichar * aTitle) +{ + return SetMarginStrs(aTitle, eHeader, kJustLeft); +} + +/* attribute wstring Header String Center */ +NS_IMETHODIMP nsPrintOptions::GetHeaderStrCenter(PRUnichar * *aTitle) +{ + return GetMarginStrs(aTitle, eHeader, kJustCenter); +} +NS_IMETHODIMP nsPrintOptions::SetHeaderStrCenter(const PRUnichar * aTitle) +{ + return SetMarginStrs(aTitle, eHeader, kJustCenter); +} + +/* attribute wstring Header String Right */ +NS_IMETHODIMP nsPrintOptions::GetHeaderStrRight(PRUnichar * *aTitle) +{ + return GetMarginStrs(aTitle, eHeader, kJustRight); +} +NS_IMETHODIMP nsPrintOptions::SetHeaderStrRight(const PRUnichar * aTitle) +{ + return SetMarginStrs(aTitle, eHeader, kJustRight); +} + + +/* attribute wstring Footer String Left */ +NS_IMETHODIMP nsPrintOptions::GetFooterStrLeft(PRUnichar * *aTitle) +{ + return GetMarginStrs(aTitle, eFooter, kJustLeft); +} +NS_IMETHODIMP nsPrintOptions::SetFooterStrLeft(const PRUnichar * aTitle) +{ + return SetMarginStrs(aTitle, eFooter, kJustLeft); +} + +/* attribute wstring Footer String Center */ +NS_IMETHODIMP nsPrintOptions::GetFooterStrCenter(PRUnichar * *aTitle) +{ + return GetMarginStrs(aTitle, eFooter, kJustCenter); +} +NS_IMETHODIMP nsPrintOptions::SetFooterStrCenter(const PRUnichar * aTitle) +{ + return SetMarginStrs(aTitle, eFooter, kJustCenter); +} + +/* attribute wstring Footer String Right */ +NS_IMETHODIMP nsPrintOptions::GetFooterStrRight(PRUnichar * *aTitle) +{ + return GetMarginStrs(aTitle, eFooter, kJustRight); +} +NS_IMETHODIMP nsPrintOptions::SetFooterStrRight(const PRUnichar * aTitle) +{ + return SetMarginStrs(aTitle, eFooter, kJustRight); +} + + /* attribute boolean isPrintFrame; */ NS_IMETHODIMP nsPrintOptions::GetHowToEnableFrameUI(PRInt16 *aHowToEnableFrameUI) { diff --git a/widget/src/xpwidgets/nsPrintOptionsImpl.h b/widget/src/xpwidgets/nsPrintOptionsImpl.h index 4bbed4a04d9..151e13b527e 100644 --- a/widget/src/xpwidgets/nsPrintOptionsImpl.h +++ b/widget/src/xpwidgets/nsPrintOptionsImpl.h @@ -50,6 +50,14 @@ protected: nsresult ReadPrefString(nsIPref * aPref, const char * aPrefId, nsString& aString); nsresult WritePrefString(nsIPref * aPref, const char * aPrefId, nsString& aString); + typedef enum { + eHeader, + eFooter + } nsHeaderFooterEnum; + + nsresult GetMarginStrs(PRUnichar * *aTitle, nsHeaderFooterEnum aType, PRInt16 aJust); + nsresult SetMarginStrs(const PRUnichar * aTitle, nsHeaderFooterEnum aType, PRInt16 aJust); + // Members nsMargin mMargin; PRInt32 mPrintOptions; @@ -58,7 +66,6 @@ protected: PRInt16 mPrintRange; PRInt32 mStartPageNum; // only used for ePrintRange_SpecifiedRange PRInt32 mEndPageNum; - PRInt16 mPageNumJust; PRInt16 mPrintFrameType; PRBool mHowToEnableFrameUI; @@ -66,9 +73,11 @@ protected: PRBool mPrintSilent; PRInt32 mPrintPageDelay; - nsFont* mDefaultFont; nsString mTitle; nsString mURL; + nsString mPageNumberFormat; + nsString mHeaderStrs[3]; + nsString mFooterStrs[3]; PRBool mPrintReversed; PRBool mPrintInColor; // a false means grayscale @@ -78,6 +87,7 @@ protected: PRBool mPrintToFile; nsString mToFileName; + static nsFont* mDefaultFont; };