src/windows/classes/sun/print/Win32PrintService.java

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 26,40 **** package sun.print; import java.io.File; import java.net.URI; import java.net.URISyntaxException; ! import java.net.URL; ! ! import java.util.Vector; import java.util.HashMap; - import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintService; import javax.print.ServiceUIFactory; import javax.print.attribute.Attribute; --- 26,37 ---- package sun.print; import java.io.File; import java.net.URI; import java.net.URISyntaxException; ! import java.util.ArrayList; import java.util.HashMap; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintService; import javax.print.ServiceUIFactory; import javax.print.attribute.Attribute;
*** 67,83 **** import javax.print.attribute.standard.PrinterStateReasons; import javax.print.attribute.standard.Severity; import javax.print.attribute.standard.Sides; import javax.print.attribute.standard.ColorSupported; import javax.print.attribute.standard.PrintQuality; - import javax.print.attribute.ResolutionSyntax; import javax.print.attribute.standard.PrinterResolution; import javax.print.attribute.standard.SheetCollate; import javax.print.event.PrintServiceAttributeListener; - import java.util.ArrayList; - - import sun.print.SunPrinterJobService; public class Win32PrintService implements PrintService, AttributeUpdater, SunPrinterJobService { public static MediaSize[] predefMedia; --- 64,76 ----
*** 308,333 **** return Win32MediaTray.AUTO; } public MediaSizeName findWin32Media(int dmIndex) { if (dmIndex >= 1 && dmIndex <= dmPaperToPrintService.length) { switch(dmIndex) { /* matching media sizes with indices beyond dmPaperToPrintService's length */ case DMPAPER_A2: return MediaSizeName.ISO_A2; case DMPAPER_A6: return MediaSizeName.ISO_A6; case DMPAPER_B6_JIS: return MediaSizeName.JIS_B6; default: - return dmPaperToPrintService[dmIndex - 1]; - } - } - return null; } private boolean addToUniqueList(ArrayList msnList, MediaSizeName mediaName) { MediaSizeName msn; for (int i=0; i< msnList.size(); i++) { msn = (MediaSizeName)msnList.get(i); --- 301,325 ---- return Win32MediaTray.AUTO; } public MediaSizeName findWin32Media(int dmIndex) { if (dmIndex >= 1 && dmIndex <= dmPaperToPrintService.length) { + return dmPaperToPrintService[dmIndex - 1]; + } switch(dmIndex) { /* matching media sizes with indices beyond dmPaperToPrintService's length */ case DMPAPER_A2: return MediaSizeName.ISO_A2; case DMPAPER_A6: return MediaSizeName.ISO_A6; case DMPAPER_B6_JIS: return MediaSizeName.JIS_B6; default: return null; } + } private boolean addToUniqueList(ArrayList msnList, MediaSizeName mediaName) { MediaSizeName msn; for (int i=0; i< msnList.size(); i++) { msn = (MediaSizeName)msnList.get(i);
*** 366,376 **** idList = new ArrayList(); for (int i=0; i < media.length; i++) { idList.add(Integer.valueOf(media[i])); } ! mediaSizes = getMediaSizes(idList, media); for (int i = 0; i < idList.size(); i++) { // match Win ID with our predefined ID using table mediaName = findWin32Media(((Integer)idList.get(i)).intValue()); // Verify that this standard size is the same size as that --- 358,369 ---- idList = new ArrayList(); for (int i=0; i < media.length; i++) { idList.add(Integer.valueOf(media[i])); } ! ArrayList<String> dmPaperNameList = new ArrayList<String>(); ! mediaSizes = getMediaSizes(idList, media, dmPaperNameList); for (int i = 0; i < idList.size(); i++) { // match Win ID with our predefined ID using table mediaName = findWin32Media(((Integer)idList.get(i)).intValue()); // Verify that this standard size is the same size as that
*** 395,404 **** --- 388,412 ---- } // Add mediaName to the msnList if (mediaName != null) { added = addToUniqueList(msnList, mediaName); + /* The following block allows to add such media names to the list, whose sizes + * matched with media sizes predefined in JDK, while whose paper IDs did not. + */ + if (!added && (idList.size() == dmPaperNameList.size())) { + Win32MediaSize wms = Win32MediaSize.findMediaName(dmPaperNameList.get(i)); + if ((wms == null) && (idList.size() == mediaSizes.length)) { + wms = new Win32MediaSize(dmPaperNameList.get(i), (Integer)idList.get(i)); + mediaSizes[i] = new MediaSize(mediaSizes[i].getX(MediaSize.MM), + mediaSizes[i].getY(MediaSize.MM), MediaSize.MM, wms); + } + if (wms != null) { + mediaName = wms; + added = addToUniqueList(msnList, mediaName); + } + } } } // init mediaSizeNames mediaSizeNames = new MediaSizeName[msnList.size()];
*** 586,596 **** } return null; } ! private MediaSize[] getMediaSizes(ArrayList idList, int[] media) { String prnPort = getPort(); int[] mediaSz = getAllMediaSizes(printer, prnPort); String[] winMediaNames = getAllMediaNames(printer, prnPort); MediaSizeName msn = null; MediaSize ms = null; --- 594,608 ---- } return null; } ! private MediaSize[] getMediaSizes(ArrayList idList, int[] media, ArrayList<String> dmPaperNameList) { ! if (dmPaperNameList == null) { ! dmPaperNameList = new ArrayList<String>(); ! } ! String prnPort = getPort(); int[] mediaSz = getAllMediaSizes(printer, prnPort); String[] winMediaNames = getAllMediaNames(printer, prnPort); MediaSizeName msn = null; MediaSize ms = null;
*** 625,648 **** ms = MediaSize.getMediaSizeForName(msn); } if (ms != null) { msList.add(ms); } else { ! Win32MediaSize wms = ! new Win32MediaSize(winMediaNames[i], media[i]); try { ms = new MediaSize(wid, ht, MediaSize.MM, wms); msList.add(ms); } catch(IllegalArgumentException e) { if (nMedia == media.length) { Integer remObj = Integer.valueOf(media[i]); idList.remove(idList.indexOf(remObj)); } } } - } MediaSize[] arr2 = new MediaSize[msList.size()]; msList.toArray(arr2); --- 637,663 ---- ms = MediaSize.getMediaSizeForName(msn); } if (ms != null) { msList.add(ms); + dmPaperNameList.add(winMediaNames[i]); } else { ! Win32MediaSize wms = Win32MediaSize.findMediaName(winMediaNames[i]); ! if (wms == null) { ! wms = new Win32MediaSize(winMediaNames[i], media[i]); ! } try { ms = new MediaSize(wid, ht, MediaSize.MM, wms); msList.add(ms); + dmPaperNameList.add(winMediaNames[i]); } catch(IllegalArgumentException e) { if (nMedia == media.length) { Integer remObj = Integer.valueOf(media[i]); idList.remove(idList.indexOf(remObj)); } } } } MediaSize[] arr2 = new MediaSize[msList.size()]; msList.toArray(arr2);
*** 1625,1634 **** --- 1640,1657 ---- private synchronized static int nextValue(String name) { winStringTable.add(name); return (winStringTable.size()-1); } + public static synchronized Win32MediaSize findMediaName(String name) { + int nameIndex = winStringTable.indexOf(name); + if (nameIndex != -1) { + return (Win32MediaSize)winEnumTable.get(nameIndex); + } + return null; + } + public Win32MediaSize(String name, int dmPaper) { super(nextValue(name)); dmPaperID = dmPaper; winEnumTable.add(this); }