home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / xulrunner-1.9.0.14 / chrome / toolkit.jar / content / global / printjoboptions.js < prev    next >
Encoding:
JavaScript  |  2007-11-13  |  29.7 KB  |  903 lines

  1. //@line 41 "/build/buildd/xulrunner-1.9-1.9.0.14+build2+nobinonly/mozilla/toolkit/components/printing/content/printjoboptions.js"
  2.  
  3. var dialog;
  4. var gPrintSettings = null;
  5. var gStringBundle  = null;
  6. var gPrintSettingsInterface  = Components.interfaces.nsIPrintSettings;
  7. var gPaperArray;
  8. var gPlexArray;
  9. var gResolutionArray;
  10. var gColorSpaceArray;
  11. var gPrefs;
  12.  
  13. var default_command    = "lpr";
  14. var gPrintSetInterface = Components.interfaces.nsIPrintSettings;
  15. var doDebug            = true;
  16.  
  17. //---------------------------------------------------
  18. function checkDouble(element, maxVal)
  19. {
  20.   var value = element.value;
  21.   if (value && value.length > 0) {
  22.     value = value.replace(/[^\.|^0-9]/g,"");
  23.     if (!value) {
  24.       element.value = "";
  25.     } else {
  26.       if (value > maxVal) {
  27.         element.value = maxVal;
  28.       } else {
  29.         element.value = value;
  30.       }
  31.     }
  32.   }
  33. }
  34.  
  35. //---------------------------------------------------
  36. function isListOfPrinterFeaturesAvailable()
  37. {
  38.   var has_printerfeatures = false;
  39.   
  40.   try {
  41.     has_printerfeatures = gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".has_special_printerfeatures");
  42.   } catch(ex) {
  43.   }
  44.   
  45.   return has_printerfeatures;
  46. }
  47.  
  48. //---------------------------------------------------
  49. function getDoubleStr(val, dec)
  50. {
  51.   var str = val.toString();
  52.   var inx = str.indexOf(".");
  53.   return str.substring(0, inx+dec+1);
  54. }
  55.  
  56. //---------------------------------------------------
  57. function initDialog()
  58. {
  59.   dialog = new Object;
  60.  
  61.   dialog.paperList       = document.getElementById("paperList");
  62.   dialog.paperGroup      = document.getElementById("paperGroup");
  63.  
  64.   dialog.plexList        = document.getElementById("plexList");
  65.   dialog.plexGroup       = document.getElementById("plexGroup");
  66.  
  67.   dialog.resolutionList  = document.getElementById("resolutionList");
  68.   dialog.resolutionGroup = document.getElementById("resolutionGroup");
  69.  
  70.   dialog.jobTitleLabel   = document.getElementById("jobTitleLabel");
  71.   dialog.jobTitleGroup   = document.getElementById("jobTitleGroup");
  72.   dialog.jobTitleInput   = document.getElementById("jobTitleInput");
  73.     
  74.   dialog.cmdLabel        = document.getElementById("cmdLabel");
  75.   dialog.cmdGroup        = document.getElementById("cmdGroup");
  76.   dialog.cmdInput        = document.getElementById("cmdInput");
  77.  
  78.   dialog.colorspaceList  = document.getElementById("colorspaceList");
  79.   dialog.colorspaceGroup = document.getElementById("colorspaceGroup");
  80.  
  81.   dialog.colorGroup      = document.getElementById("colorGroup");
  82.   dialog.colorRadioGroup = document.getElementById("colorRadioGroup");
  83.   dialog.colorRadio      = document.getElementById("colorRadio");
  84.   dialog.grayRadio       = document.getElementById("grayRadio");
  85.  
  86.   dialog.fontsGroup      = document.getElementById("fontsGroup");
  87.   dialog.downloadFonts   = document.getElementById("downloadFonts");
  88.  
  89.   dialog.topInput        = document.getElementById("topInput");
  90.   dialog.bottomInput     = document.getElementById("bottomInput");
  91.   dialog.leftInput       = document.getElementById("leftInput");
  92.   dialog.rightInput      = document.getElementById("rightInput");
  93. }
  94.  
  95. //---------------------------------------------------
  96. function round10(val)
  97. {
  98.   return Math.round(val * 10) / 10;
  99. }
  100.  
  101.  
  102. //---------------------------------------------------
  103. function paperListElement(aPaperListElement)
  104.   {
  105.     this.paperListElement = aPaperListElement;
  106.   }
  107.  
  108. paperListElement.prototype =
  109.   {
  110.     clearPaperList:
  111.       function ()
  112.         {
  113.           // remove the menupopup node child of the menulist.
  114.           this.paperListElement.removeChild(this.paperListElement.firstChild);
  115.         },
  116.  
  117.     appendPaperNames: 
  118.       function (aDataObject) 
  119.         { 
  120.           var popupNode = document.createElement("menupopup"); 
  121.           for (var i=0;i<aDataObject.length;i++)  {
  122.             var paperObj = aDataObject[i];
  123.             var itemNode = document.createElement("menuitem");
  124.             var label;
  125.             try {
  126.               label = gStringBundle.GetStringFromName(paperObj.name)
  127.             } 
  128.             catch (e) {
  129.               /* No name in string bundle ? Then build one manually (this
  130.                * usually happens when gPaperArray was build by createPaperArrayFromPrinterFeatures() ...) */              
  131.               if (paperObj.inches) {
  132.                 label = paperObj.name + " (" + round10(paperObj.width) + "x" + round10(paperObj.height) + " inch)";
  133.               }  
  134.               else {
  135.                 label = paperObj.name + " (" + paperObj.width + "x" + paperObj.height + " mm)";
  136.               }
  137.             }
  138.             itemNode.setAttribute("label", label);
  139.             itemNode.setAttribute("value", i);
  140.             popupNode.appendChild(itemNode);            
  141.           }
  142.           this.paperListElement.appendChild(popupNode); 
  143.         } 
  144.   };
  145.  
  146. //---------------------------------------------------
  147. function createPaperArrayFromDefaults()
  148. {
  149.   var paperNames   = ["letterSize", "legalSize", "exectiveSize", "a5Size", "a4Size", "a3Size", "a2Size", "a1Size", "a0Size"];
  150.   //var paperNames   = ["&letterRadio.label;", "&legalRadio.label;", "&exectiveRadio.label;", "&a4Radio.label;", "&a3Radio.label;"];
  151.   var paperWidths  = [ 8.5,  8.5,  7.25, 148.0, 210.0, 287.0, 420.0, 594.0,  841.0];
  152.   var paperHeights = [11.0, 14.0, 10.50, 210.0, 297.0, 420.0, 594.0, 841.0, 1189.0];
  153.   var paperInches  = [true, true, true,  false, false, false, false, false, false];
  154.   // this is deprecated
  155.   var paperEnums  = [0, 1, 2, 3, 4, 5, 6, 7, 8];
  156.  
  157.   gPaperArray = new Array();
  158.  
  159.   for (var i=0;i<paperNames.length;i++) {
  160.     var obj    = new Object();
  161.     obj.name   = paperNames[i];
  162.     obj.width  = paperWidths[i];
  163.     obj.height = paperHeights[i];
  164.     obj.inches = paperInches[i];
  165.     
  166.     /* Calculate the width/height in millimeters */
  167.     if (paperInches[i]) {
  168.       obj.width_mm  = paperWidths[i]  * 25.4;
  169.       obj.height_mm = paperHeights[i] * 25.4; 
  170.     }
  171.     else {
  172.       obj.width_mm  = paperWidths[i];
  173.       obj.height_mm = paperHeights[i];        
  174.     }
  175.     gPaperArray[i] = obj;
  176.   }
  177. }
  178.  
  179. //---------------------------------------------------
  180. function createPaperArrayFromPrinterFeatures()
  181. {
  182.   var printername = gPrintSettings.printerName;
  183.   if (doDebug) {
  184.     dump("createPaperArrayFromPrinterFeatures for " + printername + ".\n");
  185.   }
  186.  
  187.   gPaperArray = new Array();
  188.   
  189.   var numPapers = gPrefs.getIntPref("print.tmp.printerfeatures." + printername + ".paper.count");
  190.   
  191.   if (doDebug) {
  192.     dump("processing " + numPapers + " entries...\n");
  193.   }    
  194.  
  195.   for (var i=0;i<numPapers;i++) {
  196.     var obj    = new Object();
  197.     obj.name      = gPrefs.getCharPref("print.tmp.printerfeatures." + printername + ".paper." + i + ".name");
  198.     obj.width_mm  = gPrefs.getIntPref("print.tmp.printerfeatures."  + printername + ".paper." + i + ".width_mm");
  199.     obj.height_mm = gPrefs.getIntPref("print.tmp.printerfeatures."  + printername + ".paper." + i + ".height_mm");
  200.     obj.inches    = gPrefs.getBoolPref("print.tmp.printerfeatures." + printername + ".paper." + i + ".is_inch");
  201.     
  202.     /* Calculate the width/height in paper's native units (either inches or millimeters) */
  203.     if (obj.inches) {
  204.       obj.width  = obj.width_mm  / 25.4;
  205.       obj.height = obj.height_mm / 25.4; 
  206.     }
  207.     else {
  208.       obj.width  = obj.width_mm;
  209.       obj.height = obj.height_mm;
  210.     }
  211.  
  212.     gPaperArray[i] = obj;
  213.  
  214.     if (doDebug) {
  215.       dump("paper index=" + i + ", name=" + obj.name + ", width=" + obj.width + ", height=" + obj.height + ".\n");
  216.     }
  217.   }  
  218. }
  219.  
  220. //---------------------------------------------------
  221. function createPaperArray()
  222. {  
  223.   if (isListOfPrinterFeaturesAvailable()) {
  224.     createPaperArrayFromPrinterFeatures();    
  225.   }
  226.   else {
  227.     createPaperArrayFromDefaults();
  228.   }
  229. }
  230.  
  231. //---------------------------------------------------
  232. function createPaperSizeList(selectedInx)
  233. {
  234.   gStringBundle = srGetStrBundle("chrome://global/locale/printPageSetup.properties");
  235.  
  236.   var selectElement = new paperListElement(dialog.paperList);
  237.   selectElement.clearPaperList();
  238.  
  239.   selectElement.appendPaperNames(gPaperArray);
  240.  
  241.   if (selectedInx > -1) {
  242.     selectElement.paperListElement.selectedIndex = selectedInx;
  243.   }
  244.  
  245.   //dialog.paperList = selectElement;
  246. }
  247.  
  248. //---------------------------------------------------
  249. function plexListElement(aPlexListElement)
  250.   {
  251.     this.plexListElement = aPlexListElement;
  252.   }
  253.  
  254. plexListElement.prototype =
  255.   {
  256.     clearPlexList:
  257.       function ()
  258.         {
  259.           // remove the menupopup node child of the menulist.
  260.           this.plexListElement.removeChild(this.plexListElement.firstChild);
  261.         },
  262.  
  263.     appendPlexNames: 
  264.       function (aDataObject) 
  265.         { 
  266.           var popupNode = document.createElement("menupopup"); 
  267.           for (var i=0;i<aDataObject.length;i++)  {
  268.             var plexObj = aDataObject[i];
  269.             var itemNode = document.createElement("menuitem");
  270.             var label;
  271.             try {
  272.               label = gStringBundle.GetStringFromName(plexObj.name)
  273.             } 
  274.             catch (e) {
  275.               /* No name in string bundle ? Then build one manually (this
  276.                * usually happens when gPlexArray was build by createPlexArrayFromPrinterFeatures() ...) */              
  277.               label = plexObj.name;
  278.             }
  279.             itemNode.setAttribute("label", label);
  280.             itemNode.setAttribute("value", i);
  281.             popupNode.appendChild(itemNode);            
  282.           }
  283.           this.plexListElement.appendChild(popupNode); 
  284.         } 
  285.   };
  286.  
  287.  
  288. //---------------------------------------------------
  289. function createPlexArrayFromDefaults()
  290. {
  291.   var plexNames = ["default"];
  292.  
  293.   gPlexArray = new Array();
  294.  
  295.   for (var i=0;i<plexNames.length;i++) {
  296.     var obj    = new Object();
  297.     obj.name   = plexNames[i];
  298.     
  299.     gPlexArray[i] = obj;
  300.   }
  301. }
  302.  
  303. //---------------------------------------------------
  304. function createPlexArrayFromPrinterFeatures()
  305. {
  306.   var printername = gPrintSettings.printerName;
  307.   if (doDebug) {
  308.     dump("createPlexArrayFromPrinterFeatures for " + printername + ".\n");
  309.   }
  310.  
  311.   gPlexArray = new Array();
  312.   
  313.   var numPlexs = gPrefs.getIntPref("print.tmp.printerfeatures." + printername + ".plex.count");
  314.   
  315.   if (doDebug) {
  316.     dump("processing " + numPlexs + " entries...\n");
  317.   }    
  318.  
  319.   for ( var i=0 ; i < numPlexs ; i++ ) {
  320.     var obj = new Object();
  321.     obj.name = gPrefs.getCharPref("print.tmp.printerfeatures." + printername + ".plex." + i + ".name");
  322.  
  323.     gPlexArray[i] = obj;
  324.  
  325.     if (doDebug) {
  326.       dump("plex index=" + i + ", name='" + obj.name + "'.\n");
  327.     }
  328.   }  
  329. }
  330.  
  331. //---------------------------------------------------
  332. function createPlexArray()
  333. {  
  334.   if (isListOfPrinterFeaturesAvailable()) {
  335.     createPlexArrayFromPrinterFeatures();    
  336.   }
  337.   else {
  338.     createPlexArrayFromDefaults();
  339.   }
  340. }
  341.  
  342. //---------------------------------------------------
  343. function createPlexNameList(selectedInx)
  344. {
  345.   gStringBundle = srGetStrBundle("chrome://global/locale/printPageSetup.properties");
  346.  
  347.   var selectElement = new plexListElement(dialog.plexList);
  348.   selectElement.clearPlexList();
  349.  
  350.   selectElement.appendPlexNames(gPlexArray);
  351.  
  352.   if (selectedInx > -1) {
  353.     selectElement.plexListElement.selectedIndex = selectedInx;
  354.   }
  355.  
  356.   //dialog.plexList = selectElement;
  357. }   
  358.  
  359. //---------------------------------------------------
  360. function resolutionListElement(aResolutionListElement)
  361.   {
  362.     this.resolutionListElement = aResolutionListElement;
  363.   }
  364.  
  365. resolutionListElement.prototype =
  366.   {
  367.     clearResolutionList:
  368.       function ()
  369.         {
  370.           // remove the menupopup node child of the menulist.
  371.           this.resolutionListElement.removeChild(this.resolutionListElement.firstChild);
  372.         },
  373.  
  374.     appendResolutionNames: 
  375.       function (aDataObject) 
  376.         { 
  377.           var popupNode = document.createElement("menupopup"); 
  378.           for (var i=0;i<aDataObject.length;i++)  {
  379.             var resolutionObj = aDataObject[i];
  380.             var itemNode = document.createElement("menuitem");
  381.             var label;
  382.             try {
  383.               label = gStringBundle.GetStringFromName(resolutionObj.name)
  384.             } 
  385.             catch (e) {
  386.               /* No name in string bundle ? Then build one manually (this
  387.                * usually happens when gResolutionArray was build by createResolutionArrayFromPrinterFeatures() ...) */              
  388.               label = resolutionObj.name;
  389.             }
  390.             itemNode.setAttribute("label", label);
  391.             itemNode.setAttribute("value", i);
  392.             popupNode.appendChild(itemNode);            
  393.           }
  394.           this.resolutionListElement.appendChild(popupNode); 
  395.         } 
  396.   };
  397.  
  398.  
  399. //---------------------------------------------------
  400. function createResolutionArrayFromDefaults()
  401. {
  402.   var resolutionNames = ["default"];
  403.  
  404.   gResolutionArray = new Array();
  405.  
  406.   for (var i=0;i<resolutionNames.length;i++) {
  407.     var obj    = new Object();
  408.     obj.name   = resolutionNames[i];
  409.     
  410.     gResolutionArray[i] = obj;
  411.   }
  412. }
  413.  
  414. //---------------------------------------------------
  415. function createResolutionArrayFromPrinterFeatures()
  416. {
  417.   var printername = gPrintSettings.printerName;
  418.   if (doDebug) {
  419.     dump("createResolutionArrayFromPrinterFeatures for " + printername + ".\n");
  420.   }
  421.  
  422.   gResolutionArray = new Array();
  423.   
  424.   var numResolutions = gPrefs.getIntPref("print.tmp.printerfeatures." + printername + ".resolution.count");
  425.   
  426.   if (doDebug) {
  427.     dump("processing " + numResolutions + " entries...\n");
  428.   }    
  429.  
  430.   for ( var i=0 ; i < numResolutions ; i++ ) {
  431.     var obj = new Object();
  432.     obj.name = gPrefs.getCharPref("print.tmp.printerfeatures." + printername + ".resolution." + i + ".name");
  433.  
  434.     gResolutionArray[i] = obj;
  435.  
  436.     if (doDebug) {
  437.       dump("resolution index=" + i + ", name='" + obj.name + "'.\n");
  438.     }
  439.   }  
  440. }
  441.  
  442. //---------------------------------------------------
  443. function createResolutionArray()
  444. {  
  445.   if (isListOfPrinterFeaturesAvailable()) {
  446.     createResolutionArrayFromPrinterFeatures();    
  447.   }
  448.   else {
  449.     createResolutionArrayFromDefaults();
  450.   }
  451. }
  452.  
  453. //---------------------------------------------------
  454. function createResolutionNameList(selectedInx)
  455. {
  456.   gStringBundle = srGetStrBundle("chrome://global/locale/printPageSetup.properties");
  457.  
  458.   var selectElement = new resolutionListElement(dialog.resolutionList);
  459.   selectElement.clearResolutionList();
  460.  
  461.   selectElement.appendResolutionNames(gResolutionArray);
  462.  
  463.   if (selectedInx > -1) {
  464.     selectElement.resolutionListElement.selectedIndex = selectedInx;
  465.   }
  466.  
  467.   //dialog.resolutionList = selectElement;
  468. }  
  469.  
  470. //---------------------------------------------------
  471. function colorspaceListElement(aColorspaceListElement)
  472.   {
  473.     this.colorspaceListElement = aColorspaceListElement;
  474.   }
  475.  
  476. colorspaceListElement.prototype =
  477.   {
  478.     clearColorspaceList:
  479.       function ()
  480.         {
  481.           // remove the menupopup node child of the menulist.
  482.           this.colorspaceListElement.removeChild(this.colorspaceListElement.firstChild);
  483.         },
  484.  
  485.     appendColorspaceNames: 
  486.       function (aDataObject) 
  487.         { 
  488.           var popupNode = document.createElement("menupopup"); 
  489.           for (var i=0;i<aDataObject.length;i++)  {
  490.             var colorspaceObj = aDataObject[i];
  491.             var itemNode = document.createElement("menuitem");
  492.             var label;
  493.             try {
  494.               label = gStringBundle.GetStringFromName(colorspaceObj.name)
  495.             } 
  496.             catch (e) {
  497.               /* No name in string bundle ? Then build one manually (this
  498.                * usually happens when gColorspaceArray was build by createColorspaceArrayFromPrinterFeatures() ...) */              
  499.               label = colorspaceObj.name;
  500.             }
  501.             itemNode.setAttribute("label", label);
  502.             itemNode.setAttribute("value", i);
  503.             popupNode.appendChild(itemNode);            
  504.           }
  505.           this.colorspaceListElement.appendChild(popupNode); 
  506.         } 
  507.   };
  508.  
  509.  
  510. //---------------------------------------------------
  511. function createColorspaceArrayFromDefaults()
  512. {
  513.   var colorspaceNames = ["default"];
  514.  
  515.   gColorspaceArray = new Array();
  516.  
  517.   for (var i=0;i<colorspaceNames.length;i++) {
  518.     var obj    = new Object();
  519.     obj.name   = colorspaceNames[i];
  520.     
  521.     gColorspaceArray[i] = obj;
  522.   }
  523. }
  524.  
  525. //---------------------------------------------------
  526. function createColorspaceArrayFromPrinterFeatures()
  527. {
  528.   var printername = gPrintSettings.printerName;
  529.   if (doDebug) {
  530.     dump("createColorspaceArrayFromPrinterFeatures for " + printername + ".\n");
  531.   }
  532.  
  533.   gColorspaceArray = new Array();
  534.   
  535.   var numColorspaces = gPrefs.getIntPref("print.tmp.printerfeatures." + printername + ".colorspace.count");
  536.   
  537.   if (doDebug) {
  538.     dump("processing " + numColorspaces + " entries...\n");
  539.   }    
  540.  
  541.   for ( var i=0 ; i < numColorspaces ; i++ ) {
  542.     var obj = new Object();
  543.     obj.name = gPrefs.getCharPref("print.tmp.printerfeatures." + printername + ".colorspace." + i + ".name");
  544.  
  545.     gColorspaceArray[i] = obj;
  546.  
  547.     if (doDebug) {
  548.       dump("colorspace index=" + i + ", name='" + obj.name + "'.\n");
  549.     }
  550.   }  
  551. }
  552.  
  553. //---------------------------------------------------
  554. function createColorspaceArray()
  555. {  
  556.   if (isListOfPrinterFeaturesAvailable()) {
  557.     createColorspaceArrayFromPrinterFeatures();    
  558.   }
  559.   else {
  560.     createColorspaceArrayFromDefaults();
  561.   }
  562. }
  563.  
  564. //---------------------------------------------------
  565. function createColorspaceNameList(selectedInx)
  566. {
  567.   gStringBundle = srGetStrBundle("chrome://global/locale/printPageSetup.properties");
  568.  
  569.   var selectElement = new colorspaceListElement(dialog.colorspaceList);
  570.   selectElement.clearColorspaceList();
  571.  
  572.   selectElement.appendColorspaceNames(gColorspaceArray);
  573.  
  574.   if (selectedInx > -1) {
  575.     selectElement.colorspaceListElement.selectedIndex = selectedInx;
  576.   }
  577.  
  578.   //dialog.colorspaceList = selectElement;
  579. }  
  580.  
  581. //---------------------------------------------------
  582. function loadDialog()
  583. {
  584.   var print_paper_type       = 0;
  585.   var print_paper_unit       = 0;
  586.   var print_paper_width      = 0.0;
  587.   var print_paper_height     = 0.0;
  588.   var print_paper_name       = "";
  589.   var print_plex_name        = "";
  590.   var print_resolution_name  = "";
  591.   var print_colorspace       = "";
  592.   var print_color            = true;
  593.   var print_downloadfonts    = true;
  594.   var print_command          = default_command;
  595.   var print_jobtitle         = "";
  596.  
  597.   gPrefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  598.  
  599.   if (gPrintSettings) {
  600.     print_paper_type       = gPrintSettings.paperSizeType;
  601.     print_paper_unit       = gPrintSettings.paperSizeUnit;
  602.     print_paper_width      = gPrintSettings.paperWidth;
  603.     print_paper_height     = gPrintSettings.paperHeight;
  604.     print_paper_name       = gPrintSettings.paperName;
  605.     print_plex_name        = gPrintSettings.plexName;
  606.     print_resolution_name  = gPrintSettings.resolutionName;
  607.     print_colorspace       = gPrintSettings.colorspace;
  608.     print_color            = gPrintSettings.printInColor;
  609.     print_downloadfonts    = gPrintSettings.downloadFonts;
  610.     print_command          = gPrintSettings.printCommand;
  611.     print_jobtitle         = gPrintSettings.title;
  612.   }
  613.  
  614.   if (doDebug) {
  615.     dump("loadDialog******************************\n");
  616.     dump("paperSizeType   "+print_paper_unit+"\n");
  617.     dump("paperWidth      "+print_paper_width+"\n");
  618.     dump("paperHeight     "+print_paper_height+"\n");
  619.     dump("paperName       "+print_paper_name+"\n");
  620.     dump("plexName        "+print_plex_name+"\n");
  621.     dump("resolutionName  "+print_resolution_name+"\n");
  622.     dump("colorspace      "+print_colorspace+"\n");
  623.     dump("print_color     "+print_color+"\n");
  624.     dump("print_downloadfonts "+print_downloadfonts+"\n");
  625.     dump("print_command    "+print_command+"\n");
  626.     dump("print_jobtitle   "+print_jobtitle+"\n");
  627.   }
  628.  
  629.   createPaperArray();
  630.  
  631.   var paperSelectedInx = 0;
  632.   for (var i=0;i<gPaperArray.length;i++) { 
  633.     if (print_paper_name == gPaperArray[i].name) {
  634.       paperSelectedInx = i;
  635.       break;
  636.     }
  637.   }
  638.   
  639.   if (doDebug) {
  640.     if (i == gPaperArray.length)
  641.       dump("loadDialog: No paper found.\n");
  642.     else
  643.       dump("loadDialog: found paper '"+gPaperArray[paperSelectedInx].name+"'.\n");
  644.   }
  645.  
  646.   createPaperSizeList(paperSelectedInx);
  647.  
  648.   createPlexArray();
  649.   var plexSelectedInx = 0;
  650.   for (var i=0;i<gPlexArray.length;i++) { 
  651.     if (print_plex_name == gPlexArray[i].name) {
  652.       plexSelectedInx = i;
  653.       break;
  654.     }
  655.   }
  656.  
  657.   if (doDebug) {
  658.     if (i == gPlexArray.length)
  659.       dump("loadDialog: No plex found.\n");
  660.     else
  661.       dump("loadDialog: found plex '"+gPlexArray[plexSelectedInx].name+"'.\n");
  662.   }
  663.  
  664.   createResolutionArray();
  665.   var resolutionSelectedInx = 0;
  666.   for (var i=0;i<gResolutionArray.length;i++) { 
  667.     if (print_resolution_name == gResolutionArray[i].name) {
  668.       resolutionSelectedInx = i;
  669.       break;
  670.     }
  671.   }
  672.   
  673.   if (doDebug) {
  674.     if (i == gResolutionArray.length)
  675.       dump("loadDialog: No resolution found.\n");
  676.     else
  677.       dump("loadDialog: found resolution '"+gResolutionArray[resolutionSelectedInx].name+"'.\n");
  678.   }
  679.  
  680.   createColorspaceArray();
  681.   var colorspaceSelectedInx = 0;
  682.   for (var i=0;i<gColorspaceArray.length;i++) { 
  683.     if (print_colorspace == gColorspaceArray[i].name) {
  684.       colorspaceSelectedInx = i;
  685.       break;
  686.     }
  687.   }
  688.   
  689.   if (doDebug) {
  690.     if (i == gColorspaceArray.length)
  691.       dump("loadDialog: No colorspace found.\n");
  692.     else
  693.       dump("loadDialog: found colorspace '"+gColorspaceArray[colorspaceSelectedInx].name+"'.\n");
  694.   }
  695.   
  696.   createPlexNameList(plexSelectedInx);
  697.   createResolutionNameList(resolutionSelectedInx);
  698.   createColorspaceNameList(colorspaceSelectedInx);
  699.     
  700.   /* Enable/disable and/or hide/unhide widgets based in the information
  701.    * whether the selected printer and/or print module supports the matching
  702.    * feature or not */
  703.   if (isListOfPrinterFeaturesAvailable()) {
  704.     // job title
  705.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_jobtitle"))
  706.       dialog.jobTitleInput.removeAttribute("disabled");
  707.     else
  708.       dialog.jobTitleInput.setAttribute("disabled","true");
  709.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_jobtitle_change"))
  710.       dialog.jobTitleGroup.removeAttribute("hidden");
  711.     else
  712.       dialog.jobTitleGroup.setAttribute("hidden","true");
  713.  
  714.     // spooler command
  715.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_spoolercommand"))
  716.       dialog.cmdInput.removeAttribute("disabled");
  717.     else
  718.       dialog.cmdInput.setAttribute("disabled","true");
  719.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_spoolercommand_change"))
  720.       dialog.cmdGroup.removeAttribute("hidden");
  721.     else
  722.       dialog.cmdGroup.setAttribute("hidden","true");
  723.  
  724.     // paper size
  725.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_paper_size"))
  726.       dialog.paperList.removeAttribute("disabled");
  727.     else
  728.       dialog.paperList.setAttribute("disabled","true");
  729.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_paper_size_change"))
  730.       dialog.paperGroup.removeAttribute("hidden");
  731.     else
  732.       dialog.paperGroup.setAttribute("hidden","true");
  733.             
  734.     // plex mode
  735.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_plex"))
  736.       dialog.plexList.removeAttribute("disabled");
  737.     else
  738.       dialog.plexList.setAttribute("disabled","true");
  739.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_plex_change"))
  740.       dialog.plexGroup.removeAttribute("hidden");
  741.     else
  742.       dialog.plexGroup.setAttribute("hidden","true");
  743.  
  744.     // resolution
  745.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_resolution"))
  746.       dialog.resolutionList.removeAttribute("disabled");
  747.     else
  748.       dialog.resolutionList.setAttribute("disabled","true");
  749.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_resolution_change"))
  750.       dialog.resolutionGroup.removeAttribute("hidden");
  751.     else
  752.       dialog.resolutionGroup.setAttribute("hidden","true");
  753.  
  754.     // color/grayscale radio
  755.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_printincolor"))
  756.       dialog.colorRadioGroup.removeAttribute("disabled");
  757.     else
  758.       dialog.colorRadioGroup.setAttribute("disabled","true");
  759.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_printincolor_change"))
  760.       dialog.colorGroup.removeAttribute("hidden");
  761.     else
  762.       dialog.colorGroup.setAttribute("hidden","true");
  763.  
  764.     // colorspace
  765.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_colorspace"))
  766.       dialog.colorspaceList.removeAttribute("disabled");
  767.     else
  768.       dialog.colorspaceList.setAttribute("disabled","true");
  769.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_colorspace_change"))
  770.       dialog.colorspaceGroup.removeAttribute("hidden");
  771.     else
  772.       dialog.colorspaceGroup.setAttribute("hidden","true");
  773.  
  774.     // font download
  775.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".can_change_downloadfonts"))
  776.       dialog.downloadFonts.removeAttribute("disabled");
  777.     else
  778.       dialog.downloadFonts.setAttribute("disabled","true");
  779.     if (gPrefs.getBoolPref("print.tmp.printerfeatures." + gPrintSettings.printerName + ".supports_downloadfonts_change"))
  780.       dialog.fontsGroup.removeAttribute("hidden");
  781.     else
  782.       dialog.fontsGroup.setAttribute("hidden","true");
  783.   }
  784.  
  785.   if (print_command == "") {
  786.     print_command = default_command;
  787.   }
  788.  
  789.   if (print_color) {
  790.     dialog.colorRadioGroup.selectedItem = dialog.colorRadio;
  791.   } else {
  792.     dialog.colorRadioGroup.selectedItem = dialog.grayRadio;
  793.   }
  794.  
  795.   dialog.downloadFonts.checked = print_downloadfonts;
  796.  
  797.   dialog.cmdInput.value      = print_command;
  798.   dialog.jobTitleInput.value = print_jobtitle;
  799.  
  800.   dialog.topInput.value    = gPrintSettings.edgeTop.toFixed(2);
  801.   dialog.bottomInput.value = gPrintSettings.edgeBottom.toFixed(2);
  802.   dialog.leftInput.value   = gPrintSettings.edgeLeft.toFixed(2);
  803.   dialog.rightInput.value  = gPrintSettings.edgeRight.toFixed(2);
  804. }
  805.  
  806. //---------------------------------------------------
  807. function onLoad()
  808. {
  809.   // Init dialog.
  810.   initDialog();
  811.  
  812.   gPrintSettings = window.arguments[0].QueryInterface(gPrintSetInterface);
  813.   paramBlock = window.arguments[1].QueryInterface(Components.interfaces.nsIDialogParamBlock);
  814.  
  815.   if (doDebug) {
  816.     if (gPrintSettings == null) alert("PrintSettings is null!");
  817.     if (paramBlock == null) alert("nsIDialogParam is null!");
  818.   }
  819.  
  820.   // default return value is "cancel"
  821.   paramBlock.SetInt(0, 0);
  822.  
  823.   loadDialog();
  824. }
  825.  
  826. //---------------------------------------------------
  827. function onAccept()
  828. {
  829.   var print_paper_type        = gPrintSettingsInterface.kPaperSizeDefined;
  830.   var print_paper_unit        = gPrintSettingsInterface.kPaperSizeInches;
  831.   var print_paper_width       = 0.0;
  832.   var print_paper_height      = 0.0;
  833.   var print_paper_name        = "";
  834.   var print_plex_name         = "";
  835.   var print_resolution_name   = "";
  836.   var print_colorspace        = "";
  837.  
  838.   if (gPrintSettings != null) {
  839.     var paperSelectedInx = dialog.paperList.selectedIndex;
  840.     var plexSelectedInx  = dialog.plexList.selectedIndex;
  841.     var resolutionSelectedInx = dialog.resolutionList.selectedIndex;
  842.     var colorspaceSelectedInx = dialog.colorspaceList.selectedIndex;
  843.     if (gPaperArray[paperSelectedInx].inches) {
  844.       print_paper_unit = gPrintSettingsInterface.kPaperSizeInches;
  845.     } else {
  846.       print_paper_unit = gPrintSettingsInterface.kPaperSizeMillimeters;
  847.     }
  848.     print_paper_width      = gPaperArray[paperSelectedInx].width;
  849.     print_paper_height     = gPaperArray[paperSelectedInx].height;
  850.     print_paper_name       = gPaperArray[paperSelectedInx].name;
  851.     print_plex_name        = gPlexArray[plexSelectedInx].name;
  852.     print_resolution_name  = gResolutionArray[resolutionSelectedInx].name;
  853.     print_colorspace       = gColorspaceArray[colorspaceSelectedInx].name;
  854.  
  855.     gPrintSettings.paperSizeType   = print_paper_type;
  856.     gPrintSettings.paperSizeUnit   = print_paper_unit;
  857.     gPrintSettings.paperWidth      = print_paper_width;
  858.     gPrintSettings.paperHeight     = print_paper_height;
  859.     gPrintSettings.paperName       = print_paper_name;
  860.     gPrintSettings.plexName        = print_plex_name;
  861.     gPrintSettings.resolutionName  = print_resolution_name;
  862.     gPrintSettings.colorspace      = print_colorspace;
  863.  
  864.     // save these out so they can be picked up by the device spec
  865.     gPrintSettings.printInColor     = dialog.colorRadio.selected;
  866.     gPrintSettings.downloadFonts    = dialog.downloadFonts.checked;
  867.     gPrintSettings.printCommand     = dialog.cmdInput.value;
  868.     gPrintSettings.title            = dialog.jobTitleInput.value;
  869.  
  870.     gPrintSettings.edgeTop          = dialog.topInput.value;
  871.     gPrintSettings.edgeBottom       = dialog.bottomInput.value;
  872.     gPrintSettings.edgeLeft         = dialog.leftInput.value;
  873.     gPrintSettings.edgeRight        = dialog.rightInput.value;
  874.  
  875.     if (doDebug) {
  876.       dump("onAccept******************************\n");
  877.       dump("paperSizeType    "+print_paper_type+" (should be 1)\n");
  878.       dump("paperSizeUnit    "+print_paper_unit+"\n");
  879.       dump("paperWidth       "+print_paper_width+"\n");
  880.       dump("paperHeight      "+print_paper_height+"\n");
  881.       dump("paperName       '"+print_paper_name+"'\n");
  882.       dump("plexName        '"+print_plex_name+"'\n");
  883.       dump("resolutionName  '"+print_resolution_name+"'\n");
  884.       dump("colorspace      '"+print_colorspace+"'\n");
  885.  
  886.       dump("printInColor     "+gPrintSettings.printInColor+"\n");
  887.       dump("downloadFonts    "+gPrintSettings.downloadFonts+"\n");
  888.       dump("printCommand    '"+gPrintSettings.printCommand+"'\n");
  889.     }
  890.   } else {
  891.     dump("************ onAccept gPrintSettings: "+gPrintSettings+"\n");
  892.   }
  893.  
  894.   if (paramBlock) {
  895.     // set return value to "ok"
  896.     paramBlock.SetInt(0, 1);
  897.   } else {
  898.     dump("*** FATAL ERROR: paramBlock missing\n");
  899.   }
  900.  
  901.   return true;
  902. }
  903.