/* * Bibliothek - DockingFrames * Library built on Java/Swing, allows the user to "drag and drop" * panels containing any Swing-Component the developer likes to add. * * Copyright (C) 2008 Benjamin Sigg * * This library 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 2.1 of the License, or (at your option) any later version. * * This library 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 this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Benjamin Sigg * benjamin_sigg@gmx.ch * CH - Switzerland */ package bibliothek.gui.dock.common.layout; import java.awt.Dimension; import bibliothek.gui.Dockable; import bibliothek.gui.dock.common.intern.CDockable; import bibliothek.util.ClientOnly; /** * Represents the dimensions a {@link CDockable} would like to have. * @author Benjamin Sigg */ @ClientOnly public class RequestDimension implements Cloneable{ /** * Creates a {@link RequestDimension} only affecting the width of a {@link Dockable}. This * method is equivalent of calling <code>new RequestDimension( width, true )</code>. * @param width the requested width * @return the new request */ public static RequestDimension requestWidth( int width ){ return new RequestDimension( width, true ); } /** * Creates a {@link RequestDimension} only affecting the height of a {@link Dockable}. This * method is equivalent of calling <code>new RequestDimension( height, false )</code>. * @param height the requested height * @return the new request */ public static RequestDimension requestHeight( int height ){ return new RequestDimension( height, false ); } /** * Creates a {@link RequestDimension} affecting the width and height of a {@link Dockable}. This * method is equivalent of calling <code>new RequestDimension( width, height )</code>. * @param width the requested width * @param height the requested height * @return the new request */ public static RequestDimension request( int width, int height ){ return new RequestDimension( width, height ); } /** the preferred width */ private int width; /** whether the preferred width is set */ private boolean widthSet; /** the preferred height */ private int height; /** whether the preferred height is set */ private boolean heightSet; /** * Creates a new request dimension where width and height are not set. */ public RequestDimension(){ // nothing } /** * Creates a new request dimension copying all fields from <code>original</code>. * @param original the original from which to copy all settings */ public RequestDimension( RequestDimension original ){ this.width = original.width; this.widthSet = original.widthSet; this.height = original.height; this.heightSet = original.heightSet; } /** * Creates a new request taking with and height from <code>source</code>. * @param size the size of this dimension * @see #RequestDimension(int, int) */ public RequestDimension( Dimension size ){ this( size.width, size.height ); } /** * Creates a new request dimension where width and height are set. * @param width the initial value of width * @param height the initial value of height * @see #setWidth(int) * @see #setHeight(int) */ public RequestDimension( int width, int height ){ setWidth( width ); setHeight( height ); } /** * Creates a new request dimension where either width or height is set. * @param value the value for the width or the height * @param valueIsWidth if <code>true</code> then <code>value</code> is * considered to be the width, else <code>value</code> is considered * to be the height */ public RequestDimension( int value, boolean valueIsWidth ){ if( valueIsWidth ) setWidth( value ); else setHeight( value ); } /** * Sets the width of this dimension. This also changes the * result of {@link #isWidthSet()} to <code>true</code>. * @param width the new width */ public void setWidth( int width ) { this.width = width; this.widthSet = true; } /** * Gets the width of this dimension, clients should first check * {@link #isWidthSet()}. * @return the width of this dimension */ public int getWidth() { return width; } /** * Tells whether the {@link #getWidth() width} was set or is invalid. * @return <code>true</code> if the width is valid */ public boolean isWidthSet() { return widthSet; } /** * Deletes the width of this dimension. The result of {@link #isWidthSet()} * will be <code>false</code>. */ public void deleteWidth(){ width = 0; widthSet = false; } /** * Sets the height of this dimension. This also changes the * result of {@link #isHeightSet()} to <code>true</code>. * @param height the new height */ public void setHeight( int height ) { this.height = height; this.heightSet = true; } /** * Gets the height of this dimension, clients should first check * {@link #isHeightSet()}. * @return the height of this dimension */ public int getHeight() { return height; } /** * Tells whether the {@link #setHeight(int) height} of this dimension was * or is invalid. * @return <code>true</code> if the height is valid */ public boolean isHeightSet() { return heightSet; } /** * Deletes the height of this dimension. The result of * {@link #isHeightSet()} will change to <code>false</code>. */ public void deleteHeight(){ this.height = 0; this.heightSet = false; } @Override public RequestDimension clone(){ try{ return (RequestDimension)super.clone(); } catch( CloneNotSupportedException ex ){ // that should not happen throw new RuntimeException( ex ); } } @Override public String toString() { return getClass() + "[width=" + (widthSet ? String.valueOf( width ) : "" ) + ", height=" + (heightSet ? String.valueOf( height ) : "" ) + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + height; result = prime * result + ( heightSet ? 1231 : 1237 ); result = prime * result + width; result = prime * result + ( widthSet ? 1231 : 1237 ); return result; } @Override public boolean equals( Object obj ) { if( this == obj ) return true; if( obj == null ) return false; if( getClass() != obj.getClass() ) return false; final RequestDimension other = (RequestDimension)obj; if( height != other.height ) return false; if( heightSet != other.heightSet ) return false; if( width != other.width ) return false; if( widthSet != other.widthSet ) return false; return true; } }