From: <dal...@us...> - 2016-08-16 17:05:15
|
Revision: 24502 http://sourceforge.net/p/jedit/svn/24502 Author: daleanson Date: 2016-08-16 17:05:13 +0000 (Tue, 16 Aug 2016) Log Message: ----------- Class to represent margins for printing. Added Paths: ----------- jEdit/trunk/org/gjt/sp/jedit/print/Margins.java Added: jEdit/trunk/org/gjt/sp/jedit/print/Margins.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/print/Margins.java (rev 0) +++ jEdit/trunk/org/gjt/sp/jedit/print/Margins.java 2016-08-16 17:05:13 UTC (rev 24502) @@ -0,0 +1,175 @@ + +package org.gjt.sp.jedit.print; + +import java.util.Locale; +import javax.print.attribute.Attribute; +import javax.print.attribute.DocAttribute; +import javax.print.attribute.PrintJobAttribute; +import javax.print.attribute.PrintRequestAttribute; +import static javax.print.attribute.Size2DSyntax.*; + + +/** + * Custom printing attribute to represent page margins. + */ +public class Margins implements DocAttribute, PrintRequestAttribute, PrintJobAttribute +{ + + // margins are stored in micromillimeters + private float top; + private float left; + private float right; + private float bottom; + + + /** + * @param units One of INCH or MM. + */ + public Margins( float top, float left, float right, float bottom ) + { + if ( top < 0.0 || left < 0.0 || right < 0.0 || bottom < 0.0 ) + { + + // this shouldn't happen since the printer dialog margin text fields + // only accept positive numbers + throw new IllegalArgumentException( "Invalid margin." ); + } + + float u = new Integer( getUnits() ).floatValue(); + this.top = top * u; + this.left = left * u; + this.right = right * u; + this.bottom = bottom * u; + } + + + // returns INCH or MM depending on Locale + // note that while Canada is mostly metric, Canadian paper sizes + // are essentially US ANSI sizes rounded to the nearest 5 mm + private int getUnits() + { + String country = Locale.getDefault().getCountry(); + if ( "".equals( country ) || Locale.US.getCountry().equals( country ) || Locale.CANADA.getCountry().equals( country ) ) + { + return INCH; + } + + + return MM; + } + + + /** + * Get the margins as an array of 4 values in the order + * top, left, right, bottom. The values returned are in the given units. + * @param units Unit conversion factor, either INCH or MM. + * + * @return margins as array of top, left, right, bottom in the specified units. + * + * @exception IllegalArgumentException on invalid units. + */ + public float[] getMargins( int units ) + { + switch ( units ) + + { + case INCH: + case MM: + break; + default: + throw new IllegalArgumentException( "Invalid units." ); + } + + return new float[] {getTop( units ), getLeft( units ), getRight( units ), getBottom( units )}; + } + + + public float getTop( int units ) + { + return convertFromMicrometers( top, units ); + } + + + public float getLeft( int units ) + { + return convertFromMicrometers( left, units ); + } + + + public float getRight( int units ) + { + return convertFromMicrometers( right, units ); + } + + + public float getBottom( int units ) + { + return convertFromMicrometers( bottom, units ); + } + + + public final Class<? extends Attribute> getCategory() + { + return Margins.class; + } + + + public final String getName() + { + return "margins"; + } + + + private float convertFromMicrometers( float margin, int units ) + { + return margin / new Integer( units ).floatValue(); + } + + + public String toString( int units ) + { + String uom = ""; + switch ( units ) + + { + case INCH: + uom = "in"; + break; + case MM: + uom = "mm"; + break; + default: + throw new IllegalArgumentException( "Invalid units." ); + } + + + float[] margins = getMargins( units ); + StringBuilder sb = new StringBuilder(128); + sb.append( "Margins(" ).append( uom ).append( ")[top:" ).append( margins[0] ).append( ", left:" ); + sb.append( margins[1] ).append( ", right:" ).append( margins[2] ).append( ", bottom:" ).append( margins[3] ).append( ']' ); + return sb.toString(); + } + + + public boolean equals( Object object ) + { + boolean toReturn = false; + if ( object instanceof Margins ) + { + Margins margins = ( Margins )object; + if ( top == margins.top && left == margins.left && bottom == margins.bottom && right == margins.right ) + { + toReturn = true; + } + } + + + return toReturn; + } + + + public int hashCode() + { + return new Float(top).intValue() + 37 * new Float(left).intValue() + 43 * new Float(right).intValue() + 47 * new Float(bottom).intValue(); + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |