< prev index next >

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

Print this page




   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package sun.print;
  27 


  28 import java.awt.Window;
  29 import java.awt.print.PrinterJob;
  30 import java.io.File;
  31 import java.net.URI;
  32 import java.net.URISyntaxException;
  33 import java.util.ArrayList;
  34 import java.util.HashMap;
  35 import javax.print.DocFlavor;
  36 import javax.print.DocPrintJob;
  37 import javax.print.PrintService;
  38 import javax.print.ServiceUIFactory;
  39 import javax.print.attribute.Attribute;
  40 import javax.print.attribute.AttributeSet;
  41 import javax.print.attribute.AttributeSetUtilities;
  42 import javax.print.attribute.EnumSyntax;
  43 import javax.print.attribute.HashAttributeSet;
  44 import javax.print.attribute.PrintRequestAttributeSet;
  45 import javax.print.attribute.PrintServiceAttribute;
  46 import javax.print.attribute.PrintServiceAttributeSet;
  47 import javax.print.attribute.HashPrintServiceAttributeSet;
  48 import javax.print.attribute.standard.PrinterName;
  49 import javax.print.attribute.standard.PrinterIsAcceptingJobs;
  50 import javax.print.attribute.standard.QueuedJobCount;
  51 import javax.print.attribute.standard.JobName;
  52 import javax.print.attribute.standard.RequestingUserName;
  53 import javax.print.attribute.standard.Chromaticity;
  54 import javax.print.attribute.standard.Copies;
  55 import javax.print.attribute.standard.CopiesSupported;
  56 import javax.print.attribute.standard.Destination;


  57 import javax.print.attribute.standard.Fidelity;
  58 import javax.print.attribute.standard.Media;
  59 import javax.print.attribute.standard.MediaSizeName;
  60 import javax.print.attribute.standard.MediaSize;
  61 import javax.print.attribute.standard.MediaTray;
  62 import javax.print.attribute.standard.MediaPrintableArea;
  63 import javax.print.attribute.standard.OrientationRequested;
  64 import javax.print.attribute.standard.PageRanges;
  65 import javax.print.attribute.standard.PrinterState;
  66 import javax.print.attribute.standard.PrinterStateReason;
  67 import javax.print.attribute.standard.PrinterStateReasons;
  68 import javax.print.attribute.standard.Severity;
  69 import javax.print.attribute.standard.Sides;
  70 import javax.print.attribute.standard.ColorSupported;
  71 import javax.print.attribute.standard.PrintQuality;
  72 import javax.print.attribute.standard.PrinterResolution;
  73 import javax.print.attribute.standard.SheetCollate;
  74 import javax.print.event.PrintServiceAttributeListener;
  75 import sun.awt.windows.WPrinterJob;
  76 


1025 
1026         int caps = getPrinterCapabilities();
1027 
1028         if ((caps & DEVCAP_DUPLEX) != 0) {
1029             categList.add(Sides.class);
1030         }
1031 
1032         if ((caps & DEVCAP_QUALITY) != 0) {
1033             int[] defaults = getDefaultPrinterSettings();
1034             // Added check: if supported, we should be able to get the default.
1035             if ((defaults[3] >= DMRES_HIGH) && (defaults[3] < 0)) {
1036                 categList.add(PrintQuality.class);
1037             }
1038         }
1039 
1040         PrinterResolution[] supportedRes = getPrintResolutions();
1041         if ((supportedRes!=null) && (supportedRes.length>0)) {
1042             categList.add(PrinterResolution.class);
1043         }
1044 




1045         return categList.toArray(new Class<?>[categList.size()]);
1046     }
1047 
1048     public boolean
1049         isAttributeCategorySupported(Class<? extends Attribute> category)
1050     {
1051 
1052         if (category == null) {
1053             throw new NullPointerException("null category");
1054         }
1055 
1056         if (!(Attribute.class.isAssignableFrom(category))) {
1057             throw new IllegalArgumentException(category +
1058                                                " is not an Attribute");
1059         }
1060 
1061         Class<?>[] classList = getSupportedAttributeCategories();
1062         for (int i = 0; i < classList.length; i++) {
1063             if (category.equals(classList[i])) {
1064                 return true;


1567                 !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
1568                 flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) ||
1569                 flavor.equals(DocFlavor.INPUT_STREAM.GIF) ||
1570                 flavor.equals(DocFlavor.INPUT_STREAM.JPEG) ||
1571                 flavor.equals(DocFlavor.INPUT_STREAM.PNG) ||
1572                 flavor.equals(DocFlavor.BYTE_ARRAY.GIF) ||
1573                 flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) ||
1574                 flavor.equals(DocFlavor.BYTE_ARRAY.PNG) ||
1575                 flavor.equals(DocFlavor.URL.GIF) ||
1576                 flavor.equals(DocFlavor.URL.JPEG) ||
1577                 flavor.equals(DocFlavor.URL.PNG))) {
1578                 return false;
1579             }
1580 
1581         } else if (category == ColorSupported.class) {
1582             int caps = getPrinterCapabilities();
1583             boolean isColorSup = ((caps & DEVCAP_COLOR) != 0);
1584             if  ((!isColorSup && (attr == ColorSupported.SUPPORTED)) ||
1585                 (isColorSup && (attr == ColorSupported.NOT_SUPPORTED))) {
1586                 return false;

















1587             }
1588         }
1589         return true;
1590     }
1591 
1592     public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
1593                                                  AttributeSet attributes) {
1594 
1595         if (flavor != null && !isDocFlavorSupported(flavor)) {
1596             throw new IllegalArgumentException("flavor " + flavor +
1597                                                " is not supported");
1598         }
1599 
1600         if (attributes == null) {
1601             return null;
1602         }
1603 
1604         Attribute attr;
1605         AttributeSet unsupp = new HashAttributeSet();
1606         Attribute []attrs = attributes.toArray();




   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 package sun.print;
  27 
  28 import java.awt.GraphicsEnvironment;
  29 import java.awt.Toolkit;
  30 import java.awt.Window;
  31 import java.awt.print.PrinterJob;
  32 import java.io.File;
  33 import java.net.URI;
  34 import java.net.URISyntaxException;
  35 import java.util.ArrayList;
  36 import java.util.HashMap;
  37 import javax.print.DocFlavor;
  38 import javax.print.DocPrintJob;
  39 import javax.print.PrintService;
  40 import javax.print.ServiceUIFactory;
  41 import javax.print.attribute.Attribute;
  42 import javax.print.attribute.AttributeSet;
  43 import javax.print.attribute.AttributeSetUtilities;
  44 import javax.print.attribute.EnumSyntax;
  45 import javax.print.attribute.HashAttributeSet;
  46 import javax.print.attribute.PrintRequestAttributeSet;
  47 import javax.print.attribute.PrintServiceAttribute;
  48 import javax.print.attribute.PrintServiceAttributeSet;
  49 import javax.print.attribute.HashPrintServiceAttributeSet;
  50 import javax.print.attribute.standard.PrinterName;
  51 import javax.print.attribute.standard.PrinterIsAcceptingJobs;
  52 import javax.print.attribute.standard.QueuedJobCount;
  53 import javax.print.attribute.standard.JobName;
  54 import javax.print.attribute.standard.RequestingUserName;
  55 import javax.print.attribute.standard.Chromaticity;
  56 import javax.print.attribute.standard.Copies;
  57 import javax.print.attribute.standard.CopiesSupported;
  58 import javax.print.attribute.standard.Destination;
  59 import javax.print.attribute.standard.DialogOwner;
  60 import javax.print.attribute.standard.DialogTypeSelection;
  61 import javax.print.attribute.standard.Fidelity;
  62 import javax.print.attribute.standard.Media;
  63 import javax.print.attribute.standard.MediaSizeName;
  64 import javax.print.attribute.standard.MediaSize;
  65 import javax.print.attribute.standard.MediaTray;
  66 import javax.print.attribute.standard.MediaPrintableArea;
  67 import javax.print.attribute.standard.OrientationRequested;
  68 import javax.print.attribute.standard.PageRanges;
  69 import javax.print.attribute.standard.PrinterState;
  70 import javax.print.attribute.standard.PrinterStateReason;
  71 import javax.print.attribute.standard.PrinterStateReasons;
  72 import javax.print.attribute.standard.Severity;
  73 import javax.print.attribute.standard.Sides;
  74 import javax.print.attribute.standard.ColorSupported;
  75 import javax.print.attribute.standard.PrintQuality;
  76 import javax.print.attribute.standard.PrinterResolution;
  77 import javax.print.attribute.standard.SheetCollate;
  78 import javax.print.event.PrintServiceAttributeListener;
  79 import sun.awt.windows.WPrinterJob;
  80 


1029 
1030         int caps = getPrinterCapabilities();
1031 
1032         if ((caps & DEVCAP_DUPLEX) != 0) {
1033             categList.add(Sides.class);
1034         }
1035 
1036         if ((caps & DEVCAP_QUALITY) != 0) {
1037             int[] defaults = getDefaultPrinterSettings();
1038             // Added check: if supported, we should be able to get the default.
1039             if ((defaults[3] >= DMRES_HIGH) && (defaults[3] < 0)) {
1040                 categList.add(PrintQuality.class);
1041             }
1042         }
1043 
1044         PrinterResolution[] supportedRes = getPrintResolutions();
1045         if ((supportedRes!=null) && (supportedRes.length>0)) {
1046             categList.add(PrinterResolution.class);
1047         }
1048 
1049         if (GraphicsEnvironment.isHeadless() == false) {
1050             categList.add(DialogOwner.class);
1051             categList.add(DialogTypeSelection.class);
1052         }
1053         return categList.toArray(new Class<?>[categList.size()]);
1054     }
1055 
1056     public boolean
1057         isAttributeCategorySupported(Class<? extends Attribute> category)
1058     {
1059 
1060         if (category == null) {
1061             throw new NullPointerException("null category");
1062         }
1063 
1064         if (!(Attribute.class.isAssignableFrom(category))) {
1065             throw new IllegalArgumentException(category +
1066                                                " is not an Attribute");
1067         }
1068 
1069         Class<?>[] classList = getSupportedAttributeCategories();
1070         for (int i = 0; i < classList.length; i++) {
1071             if (category.equals(classList[i])) {
1072                 return true;


1575                 !(flavor.equals(DocFlavor.SERVICE_FORMATTED.PAGEABLE) ||
1576                 flavor.equals(DocFlavor.SERVICE_FORMATTED.PRINTABLE) ||
1577                 flavor.equals(DocFlavor.INPUT_STREAM.GIF) ||
1578                 flavor.equals(DocFlavor.INPUT_STREAM.JPEG) ||
1579                 flavor.equals(DocFlavor.INPUT_STREAM.PNG) ||
1580                 flavor.equals(DocFlavor.BYTE_ARRAY.GIF) ||
1581                 flavor.equals(DocFlavor.BYTE_ARRAY.JPEG) ||
1582                 flavor.equals(DocFlavor.BYTE_ARRAY.PNG) ||
1583                 flavor.equals(DocFlavor.URL.GIF) ||
1584                 flavor.equals(DocFlavor.URL.JPEG) ||
1585                 flavor.equals(DocFlavor.URL.PNG))) {
1586                 return false;
1587             }
1588 
1589         } else if (category == ColorSupported.class) {
1590             int caps = getPrinterCapabilities();
1591             boolean isColorSup = ((caps & DEVCAP_COLOR) != 0);
1592             if  ((!isColorSup && (attr == ColorSupported.SUPPORTED)) ||
1593                 (isColorSup && (attr == ColorSupported.NOT_SUPPORTED))) {
1594                 return false;
1595             }
1596         } else if (category == DialogTypeSelection.class) {
1597             return true; // isHeadless was checked by category support
1598         } else if (category == DialogOwner.class) {
1599             DialogOwner owner = (DialogOwner)attr;
1600             DialogTypeSelection dts = (attributes == null) ? null :
1601                 (DialogTypeSelection)attributes.get(DialogTypeSelection.class);
1602             if (dts == DialogTypeSelection.NATIVE) {
1603                 return owner.getID() != 0;
1604             } else {
1605                if (owner.getID() != 0) {
1606                   return false;
1607                } else if (owner.getOwner() != null) {
1608                    return true;
1609                } else {
1610                    return Toolkit.getDefaultToolkit().isAlwaysOnTopSupported();
1611                }
1612             }
1613         }
1614         return true;
1615     }
1616 
1617     public AttributeSet getUnsupportedAttributes(DocFlavor flavor,
1618                                                  AttributeSet attributes) {
1619 
1620         if (flavor != null && !isDocFlavorSupported(flavor)) {
1621             throw new IllegalArgumentException("flavor " + flavor +
1622                                                " is not supported");
1623         }
1624 
1625         if (attributes == null) {
1626             return null;
1627         }
1628 
1629         Attribute attr;
1630         AttributeSet unsupp = new HashAttributeSet();
1631         Attribute []attrs = attributes.toArray();


< prev index next >