//---------------------------------------------------------------------- nsresult GlobalPrinters::InitializeGlobalPrinters () { if (PrintersAreAllocated()) return NS_OK; mGlobalNumPrinters = 0; #ifdef USE_POSTSCRIPT mGlobalPrinterList = new nsStringArray(); if (!mGlobalPrinterList) return NS_ERROR_OUT_OF_MEMORY; /* add an entry for the default printer (see nsPostScriptObj.cpp) */ mGlobalPrinterList->AppendString( nsString(NS_ConvertASCIItoUCS2(NS_POSTSCRIPT_DRIVER_NAME "default"))); mGlobalNumPrinters++; /* get the list of printers */ char *printerList = nsnull; /* the env var MOZILLA_PRINTER_LIST can "override" the prefs */ printerList = PR_GetEnv("MOZILLA_PRINTER_LIST"); if (!printerList) { nsresult rv; nsCOMPtr<nsIPref> pPrefs = do_GetService(NS_PREF_CONTRACTID, &rv); if (NS_SUCCEEDED(rv)) { (void) pPrefs->CopyCharPref("print.printer_list", &printerList); } } if (printerList) { char *tok_lasts; char *name; /* PL_strtok_r() will modify the string - copy it! */ printerList = strdup(printerList); if (!printerList) return NS_ERROR_OUT_OF_MEMORY; for( name = PL_strtok_r(printerList, " ", &tok_lasts) ; name != nsnull ; name = PL_strtok_r(nsnull, " ", &tok_lasts) ) { mGlobalPrinterList->AppendString( nsString(NS_ConvertASCIItoUCS2(NS_POSTSCRIPT_DRIVER_NAME)) + nsString(NS_ConvertASCIItoUCS2(name))); mGlobalNumPrinters++; } free(printerList); } #endif /* USE_POSTSCRIPT */ if (mGlobalNumPrinters == 0) return NS_ERROR_GFX_PRINTER_NO_PRINTER_AVAILABLE; return NS_OK; }
nsresult GlobalPrinters::InitializeGlobalPrinters () { if (PrintersAreAllocated()) return NS_OK; mGlobalNumPrinters = 0; mGlobalNumPrinters = nsDeviceContextSpecOS2::PrnDlg.GetNumPrinters(); if (!mGlobalNumPrinters) return NS_ERROR_GFX_PRINTER_NO_PRINTER_AVAILABLE; mGlobalPrinterList = new nsStringArray(); if (!mGlobalPrinterList) return NS_ERROR_OUT_OF_MEMORY; nsresult rv; nsCOMPtr<nsIPrefBranch> pPrefs = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); BOOL prefFailed = NS_FAILED(rv); // don't return on failure, optional feature for (ULONG i = 0; i < mGlobalNumPrinters; i++) { nsXPIDLCString printer; nsDeviceContextSpecOS2::PrnDlg.GetPrinter(i, getter_Copies(printer)); nsAutoChar16Buffer printerName; PRInt32 printerNameLength; rv = MultiByteToWideChar(0, printer, strlen(printer), printerName, printerNameLength); mGlobalPrinterList->AppendString(nsDependentString(printerName.Elements())); // store printer description in prefs for the print dialog if (!prefFailed) { nsCAutoString printerDescription; printerDescription = nsCAutoString(nsDeviceContextSpecOS2::PrnDlg.GetPrintDriver(i)->szDeviceName); printerDescription += " ("; printerDescription += nsCAutoString(nsDeviceContextSpecOS2::PrnDlg.GetDriverType(i)); printerDescription += ")"; pPrefs->SetCharPref(nsPrintfCString(256, "print.printer_%s.printer_description", printer.get()).get(), printerDescription.get()); } } return NS_OK; }
//---------------------------------------------------------------------- nsresult GlobalPrinters::InitializeGlobalPrinters () { if (PrintersAreAllocated()) { return NS_OK; } mGlobalPrinterList = new nsStringArray(); if (!mGlobalPrinterList) return NS_ERROR_OUT_OF_MEMORY; nsresult rv; nsCOMPtr<nsIPrefBranch> pPrefs = do_GetService(NS_PREFSERVICE_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; #ifdef USE_POSTSCRIPT nsPSPrinterList psMgr; if (NS_SUCCEEDED(psMgr.Init()) && psMgr.Enabled()) { /* Get the list of PostScript-module printers */ nsCStringArray printerList; psMgr.GetPrinterList(printerList); printerList.EnumerateForwards(GlobalPrinterEnumFunc, mGlobalPrinterList); } #endif /* USE_POSTSCRIPT */ /* If there are no printers available after all checks, return an error */ if (!mGlobalPrinterList->Count()) { /* Make sure we do not cache an empty printer list */ FreeGlobalPrinters(); return NS_ERROR_GFX_PRINTER_NO_PRINTER_AVAILABLE; } return NS_OK; }