bug 235763 Print dialog show list printer descriptions if available

patch by Roland Mainz <roland.mainz@nrubsig.org> r+sr=roc
This commit is contained in:
cbiesinger%web.de 2004-05-28 15:50:18 +00:00
parent 8b832d72cc
commit 05905338da
5 changed files with 69 additions and 39 deletions

View File

@ -1033,6 +1033,11 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
mGlobalPrinterList = new nsStringArray();
if (!mGlobalPrinterList)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv;
nsCOMPtr<nsIPref> pPrefs = do_GetService(NS_PREF_CONTRACTID, &rv);
if (NS_FAILED(rv))
return rv;
#ifdef USE_XPRINT
XPPrinterList plist = XpuGetPrinterList(nsnull, &mGlobalNumPrinters);
@ -1040,9 +1045,13 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
if (plist && (mGlobalNumPrinters > 0))
{
int i;
for( i = 0 ; i < mGlobalNumPrinters ; i++ )
for( i = 0 ; i < mGlobalNumPrinters ; i++ )
{
mGlobalPrinterList->AppendString(nsString(NS_ConvertASCIItoUCS2(plist[i].name)));
/* Add name to our list of printers... */
mGlobalPrinterList->AppendString(nsString(NS_ConvertUTF8toUCS2(plist[i].name)));
/* ... and store the description text for this printer */
pPrefs->SetCharPref(nsPrintfCString(256, "print.printer_%s.printer_description", plist[i].name).get(), plist[i].desc);
}
XpuFreePrinterList(plist);
@ -1050,7 +1059,6 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
#endif /* USE_XPRINT */
#ifdef USE_POSTSCRIPT
nsCOMPtr<nsIPref> pPrefs = do_GetService(NS_PREF_CONTRACTID);
PRBool psPrintModuleEnabled = PR_TRUE;
const char *val = PR_GetEnv("MOZILLA_POSTSCRIPT_ENABLED");
@ -1060,10 +1068,8 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
}
else
{
if (pPrefs) {
if (NS_FAILED(pPrefs->GetBoolPref("print.postscript.enabled", &psPrintModuleEnabled))) {
psPrintModuleEnabled = PR_TRUE;
}
if (NS_FAILED(pPrefs->GetBoolPref("print.postscript.enabled", &psPrintModuleEnabled))) {
psPrintModuleEnabled = PR_TRUE;
}
}
@ -1076,9 +1082,7 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
printerList = PR_GetEnv("MOZILLA_POSTSCRIPT_PRINTER_LIST");
if (!printerList) {
if (pPrefs) {
(void) pPrefs->CopyCharPref("print.printer_list", &printerList);
}
(void) pPrefs->CopyCharPref("print.printer_list", &printerList);
}
if (printerList) {

View File

@ -1034,6 +1034,11 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
mGlobalPrinterList = new nsStringArray();
if (!mGlobalPrinterList)
return NS_ERROR_OUT_OF_MEMORY;
nsresult rv;
nsCOMPtr<nsIPref> pPrefs = do_GetService(NS_PREF_CONTRACTID, &rv);
if (NS_FAILED(rv))
return rv;
#ifdef USE_XPRINT
XPPrinterList plist = XpuGetPrinterList(nsnull, &mGlobalNumPrinters);
@ -1041,9 +1046,13 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
if (plist && (mGlobalNumPrinters > 0))
{
int i;
for( i = 0 ; i < mGlobalNumPrinters ; i++ )
for( i = 0 ; i < mGlobalNumPrinters ; i++ )
{
mGlobalPrinterList->AppendString(nsString(NS_ConvertASCIItoUCS2(plist[i].name)));
/* Add name to our list of printers... */
mGlobalPrinterList->AppendString(nsString(NS_ConvertUTF8toUCS2(plist[i].name)));
/* ... and store the description text for this printer */
pPrefs->SetCharPref(nsPrintfCString(256, "print.printer_%s.printer_description", plist[i].name).get(), plist[i].desc);
}
XpuFreePrinterList(plist);
@ -1051,7 +1060,6 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
#endif /* USE_XPRINT */
#ifdef USE_POSTSCRIPT
nsCOMPtr<nsIPref> pPrefs = do_GetService(NS_PREF_CONTRACTID);
PRBool psPrintModuleEnabled = PR_TRUE;
const char *val = PR_GetEnv("MOZILLA_POSTSCRIPT_ENABLED");
@ -1061,10 +1069,8 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
}
else
{
if (pPrefs) {
if (NS_FAILED(pPrefs->GetBoolPref("print.postscript.enabled", &psPrintModuleEnabled))) {
psPrintModuleEnabled = PR_TRUE;
}
if (NS_FAILED(pPrefs->GetBoolPref("print.postscript.enabled", &psPrintModuleEnabled))) {
psPrintModuleEnabled = PR_TRUE;
}
}
@ -1077,9 +1083,7 @@ nsresult GlobalPrinters::InitializeGlobalPrinters ()
printerList = PR_GetEnv("MOZILLA_POSTSCRIPT_PRINTER_LIST");
if (!printerList) {
if (pPrefs) {
(void) pPrefs->CopyCharPref("print.printer_list", &printerList);
}
(void) pPrefs->CopyCharPref("print.printer_list", &printerList);
}
if (printerList) {

View File

@ -60,6 +60,7 @@ function initDialog()
dialog = new Object;
dialog.propertiesButton = document.getElementById("properties");
dialog.descText = document.getElementById("descText");
dialog.destGroup = document.getElementById("destGroup");
dialog.fileRadio = document.getElementById("fileRadio");
@ -134,6 +135,20 @@ function doEnablePrintToFile(value)
}
}
//---------------------------------------------------
function getPrinterDescription(printerName)
{
var s = "";
try {
/* This may not work with non-ASCII test (see bug 235763 comment #16) */
s = gPrefs.getCharPref("print.printer_" + printerName + ".printer_description")
} catch(e) {
}
return s;
}
//---------------------------------------------------
function listElement(aListElement)
{
@ -146,13 +161,16 @@ listElement.prototype =
function ()
{
// remove the menupopup node child of the menulist.
this.listElement.removeChild(this.listElement.firstChild);
var popup = this.listElement.firstChild;
if (popup) {
this.listElement.removeChild(popup);
}
},
appendPrinterNames:
function (aDataObject)
{
var popupNode = document.createElement("menupopup");
var list = document.getElementById("printerList");
var strDefaultPrinterName = "";
var printerName;
@ -163,10 +181,8 @@ listElement.prototype =
var printerNameStr = printerName.toString();
if (strDefaultPrinterName == "")
strDefaultPrinterName = printerNameStr;
var itemNode = document.createElement("menuitem");
itemNode.setAttribute("value", printerNameStr);
itemNode.setAttribute("label", printerNameStr);
popupNode.appendChild(itemNode);
list.appendItem(printerNameStr, printerNameStr, getPrinterDescription(printerNameStr));
}
if (strDefaultPrinterName != "") {
this.listElement.removeAttribute("disabled");
@ -186,7 +202,6 @@ listElement.prototype =
doEnablePrintToFile(false);
}
this.listElement.appendChild(popupNode);
return strDefaultPrinterName;
}
};
@ -213,6 +228,8 @@ function setPrinterDefaultsForSelectedPrinter()
{
gPrintSettings.printerName = dialog.printerList.value;
dialog.descText.value = getPrinterDescription(gPrintSettings.printerName);
// First get any defaults from the printer
printService.initPrintSettingsFromPrinter(gPrintSettings.printerName, gPrintSettings);

View File

@ -26,7 +26,7 @@
Dan Rosen <dr@netscape.com>
Jessica Blanco <jblanco@us.ibm.com>
Asko Tontti <atontti@cc.hut.fi>
Roland Mainz <roland.mainz@informatik.med.uni-giessen.de>
Roland Mainz <roland.mainz@nrubsig.org>
Alternatively, the contents of this file may be used under the terms of
either of the GNU General Public License Version 2 or later (the "GPL"),
@ -69,20 +69,15 @@
<rows>
<row align="center">
<hbox align="center" pack="end">
<label value="&printTo.label;"/>
<label id="descTextLabel" control="descText" value="&descText.label;"/>
</hbox>
<radiogroup id="destGroup" orient="horizontal">
<radio id="printerRadio" label="&printerRadio.label;" oncommand="if (!this.disabled) doEnablePrintToFile(false);"/>
<radio id="fileRadio" label="&fileRadio.label;" oncommand="if (!this.disabled) doEnablePrintToFile(true);"/>
</radiogroup>
<label id="descText" flex="1" value="-" />
</row>
<row align="center">
<hbox align="center" pack="end">
<label id="printerLabel" value="&printerInput.label;"/>
</hbox>
<menulist id="printerList" flex="1" oncommand="setPrinterDefaultsForSelectedPrinter();">
<menupopup/>
</menulist>
<menulist id="printerList" flex="1" type="description" oncommand="setPrinterDefaultsForSelectedPrinter();"/>
<button id="properties" label="&propertiesButton.label;" oncommand="displayPropertiesDialog();"/>
</row>
<row align="center">
@ -92,6 +87,15 @@
<textbox id="fileInput" flex="1" onblur="stripTrailingWhitespace(this)"/>
<button id="chooseFile" label="&chooseButton.label;" oncommand="onChooseFile()"/>
</row>
<row align="center">
<hbox align="center" pack="end">
<label value="&printTo.label;"/>
</hbox>
<radiogroup id="destGroup" orient="horizontal">
<radio id="printerRadio" label="&printerRadio.label;" oncommand="if (!this.disabled) doEnablePrintToFile(false);"/>
<radio id="fileRadio" label="&fileRadio.label;" oncommand="if (!this.disabled) doEnablePrintToFile(true);"/>
</radiogroup>
</row>
</rows>
</grid>

View File

@ -11,10 +11,11 @@
<!ENTITY fileRadio.label "File">
<!ENTITY propertiesButton.label "Properties...">
<!ENTITY descText.label "Printer Description:">
<!ENTITY printer.label "Printer">
<!ENTITY printerInput.label "Printer:">
<!ENTITY fileInput.label "File:">
<!ENTITY chooseButton.label "Choose File...">
<!ENTITY printerInput.label "Printer Name:">
<!ENTITY fileInput.label "File Name:">
<!ENTITY chooseButton.label "Select File...">
<!ENTITY printrangeGroup.label "Print Range">
<!ENTITY allpagesRadio.label "All Pages">