/* ****************************************************************************** * * Copyright 2008-2010 Hans Dijkema * * JRichTextEditor is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * JRichTextEditor is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with JRichTextEditor. If not, see <http://www.gnu.org/licenses/>. * * ******************************************************************************/ package nl.dykema.jxmlnote.widgets; import java.awt.Component; import java.awt.print.PrinterJob; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import javax.print.attribute.Attribute; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.MediaPrintableArea; import javax.print.attribute.standard.MediaSizeName; import javax.print.attribute.standard.OrientationRequested; import nl.dykema.jxmlnote.exceptions.DefaultXMLNoteErrorHandler; import nl.dykema.jxmlnote.interfaces.XMLNotePreferences; public class JPrintPreferences { private XMLNotePreferences _preferences; MediaSizeName [] sizes={ MediaSizeName.A,MediaSizeName.B,MediaSizeName.C,MediaSizeName.D,MediaSizeName.E, MediaSizeName.EXECUTIVE, MediaSizeName.FOLIO, MediaSizeName.INVOICE, MediaSizeName.ISO_A0,MediaSizeName.ISO_A1,MediaSizeName.ISO_A2,MediaSizeName.ISO_A3, MediaSizeName.ISO_A4,MediaSizeName.ISO_A5,MediaSizeName.ISO_A6,MediaSizeName.ISO_A7, MediaSizeName.ISO_A8,MediaSizeName.ISO_A9,MediaSizeName.ISO_A10, MediaSizeName.ISO_B0,MediaSizeName.ISO_B1,MediaSizeName.ISO_B2,MediaSizeName.ISO_B3, MediaSizeName.ISO_B4,MediaSizeName.ISO_B5,MediaSizeName.ISO_B6,MediaSizeName.ISO_B7, MediaSizeName.ISO_B8,MediaSizeName.ISO_B9,MediaSizeName.ISO_B10, MediaSizeName.ISO_C0,MediaSizeName.ISO_C1,MediaSizeName.ISO_C2,MediaSizeName.ISO_C3, MediaSizeName.ISO_C4,MediaSizeName.ISO_C5,MediaSizeName.ISO_C6, MediaSizeName.ISO_DESIGNATED_LONG, MediaSizeName.ITALY_ENVELOPE, MediaSizeName.JAPANESE_DOUBLE_POSTCARD,MediaSizeName.JAPANESE_POSTCARD, MediaSizeName.JIS_B0,MediaSizeName.JIS_B1,MediaSizeName.JIS_B2,MediaSizeName.JIS_B3, MediaSizeName.JIS_B4,MediaSizeName.JIS_B5,MediaSizeName.JIS_B6,MediaSizeName.JIS_B7, MediaSizeName.JIS_B8,MediaSizeName.JIS_B9,MediaSizeName.JIS_B10, MediaSizeName.LEDGER, MediaSizeName.MONARCH_ENVELOPE, MediaSizeName.NA_10X13_ENVELOPE,MediaSizeName.NA_10X14_ENVELOPE,MediaSizeName.NA_10X15_ENVELOPE, MediaSizeName.NA_5X7,MediaSizeName.NA_6X9_ENVELOPE,MediaSizeName.NA_7X9_ENVELOPE, MediaSizeName.NA_8X10,MediaSizeName.NA_9X11_ENVELOPE,MediaSizeName.NA_9X12_ENVELOPE, MediaSizeName.NA_LEGAL,MediaSizeName.NA_LETTER, MediaSizeName.NA_NUMBER_9_ENVELOPE,MediaSizeName.NA_NUMBER_10_ENVELOPE, MediaSizeName.NA_NUMBER_11_ENVELOPE,MediaSizeName.NA_NUMBER_12_ENVELOPE, MediaSizeName.PERSONAL_ENVELOPE,MediaSizeName.QUARTO,MediaSizeName.TABLOID }; public void pageDialog() { PrinterJob job=PrinterJob.getPrinterJob(); HashPrintRequestAttributeSet set=new HashPrintRequestAttributeSet(); fromPrefs(set); job.pageDialog(set); toPrefs(set); } public void fromPrefs(PrintRequestAttributeSet set) { try { String val=_preferences.getString("printprefs", null); ByteArrayInputStream bin=new ByteArrayInputStream(val.getBytes("UTF-8")); XMLDecoder dec=new XMLDecoder(bin); Integer n=(Integer) dec.readObject(); for(int i=0;i<n;i++) { String name=(String) dec.readObject(); if (name.equals("MediaPrintableArea")) { int size=(Integer) dec.readObject(); float[] f=new float[size]; for (int k=0;k<size;k++) { f[k]=(Float) dec.readObject(); } set.add(new MediaPrintableArea(f[0], f[1], f[2], f[3], MediaPrintableArea.MM)); } else if (name.equals("MediaSizeName")) { int value=(Integer) dec.readObject(); for (MediaSizeName mn : sizes) { if (mn.getValue()==value) { set.add(mn); break; } } } else if (name.equals("OrientationRequested")) { int value=(Integer) dec.readObject(); if (value==OrientationRequested.LANDSCAPE.getValue()) { set.add(OrientationRequested.LANDSCAPE); } else if (value==OrientationRequested.PORTRAIT.getValue()) { set.add(OrientationRequested.PORTRAIT); } else if (value==OrientationRequested.REVERSE_LANDSCAPE.getValue()) { set.add(OrientationRequested.REVERSE_LANDSCAPE); } else if (value==OrientationRequested.REVERSE_PORTRAIT.getValue()) { set.add(OrientationRequested.REVERSE_PORTRAIT); } } } dec.close(); } catch (Exception E) { DefaultXMLNoteErrorHandler.exception(E); } } public void toPrefs(PrintRequestAttributeSet f) { Attribute[] attr=f.toArray(); ByteArrayOutputStream out=new ByteArrayOutputStream (); XMLEncoder enc=new XMLEncoder(out); enc.writeObject(attr.length); for (Attribute a : attr) { if (a instanceof MediaSizeName) { MediaSizeName nm=(MediaSizeName) a; enc.writeObject("MediaSizeName"); enc.writeObject(nm.getValue()); } else if (a instanceof OrientationRequested) { OrientationRequested or=(OrientationRequested) a; enc.writeObject("OrientationRequested"); enc.writeObject(or.getValue()); } else if (a instanceof MediaPrintableArea) { enc.writeObject("MediaPrintableArea"); MediaPrintableArea area=(MediaPrintableArea) a; float[] margins=area.getPrintableArea(MediaPrintableArea.MM); enc.writeObject((Integer) margins.length); for (float m : margins) { enc.writeObject((Float) m); } } } enc.close(); try { String val=out.toString("UTF-8"); _preferences.put("printprefs",val); } catch (Exception E) { DefaultXMLNoteErrorHandler.exception(E); } } public JPrintPreferences(Component parent, XMLNotePreferences prefs) { _preferences=prefs; } }