/*
* 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) 2007 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.action;
import bibliothek.gui.Dockable;
/**
* A LocationHint gives information about the preferred location of a
* {@link DockActionSource} in respect to other sources. How to interpret
* the LocationHint is up to the {@link ActionOffer} which creates the
* final {@link DockActionSource} for a {@link Dockable}.
* @author Benjamin Sigg
*
*/
public class LocationHint {
/** Used if this hint was produced by a {@link Dockable} */
public static final Origin DOCKABLE = new Origin( "dockable" );
/** Used if this hint was produced by an {@link ActionGuard} */
public static final Origin ACTION_GUARD = new Origin( "action_guard" );
/** Used if this hint was produced by the parent of a dockable */
public static final Origin DIRECT_ACTION = new Origin( "direct_action" );
/** Used if this hint was produced by one of the parents of a dockable */
public static final Origin INDIRECT_ACTION = new Origin( "indirect_action" );
/** Used if this hint was produced by an {@link ActionOffer}*/
public static final Origin ACTION_OFFER = new Origin( "action_offer" );
/** Used if it is unclear who produced this hint */
public static final Origin UNKNOWN_ORIGIN = new Origin( "unknown" );
/** Used to indicate that this hint likes to stay as left as possible */
public static final Hint LEFT_OF_ALL = new Hint( "left_of_all" );
/** Used to indicate that this hint likes to stay at the left side */
public static final Hint VERY_LEFT = new Hint( "very_left" );
/** Used to indicate that this hint likes to stay left of the middle */
public static final Hint LEFT = new Hint( "left" );
/** Used to indicate that this hint likes to stay a bit left of the middle */
public static final Hint LITTLE_LEFT = new Hint( "little_left" );
/** Used to indicate that this hint likes to stay in the middle */
public static final Hint MIDDLE = new Hint( "middle" );
/** Used to indicate that this hint likes to stay a bit right of the middle */
public static final Hint LITTLE_RIGHT = new Hint( "little_right" );
/** Used to indicate that this hint likes to stay right of the middle */
public static final Hint RIGHT = new Hint( "right" );
/** Used to indicate that this hint likes to stay at the right side */
public static final Hint VERY_RIGHT = new Hint( "very_right" );
/** Used to indicate that this hint likes to stay as right as possible */
public static final Hint RIGHT_OF_ALL = new Hint( "right_of_all" );
/** Used to indicate that this hint does not know where to stay */
public static final Hint UNKNOWN_HINT = new Hint( "unknown" );
/** The default-location-hint does not know anything*/
public static final LocationHint UNKNOWN = new LocationHint( null, null );
/** An object that can be freely used by client code */
private Object clientObject;
/** Tells who produced this hint */
private Origin origin;
/** Tells where this hint likes to stay */
private Hint hint;
/**
* Creates a new LocationHint.
* @param origin tells who produces this hint
*/
public LocationHint( Origin origin ){
this( origin, null, null );
}
/**
* Creates a new LocationHint.
* @param hint tells where this hint likes to stay
*/
public LocationHint( Hint hint ){
this( null, hint, null );
}
/**
* Creates a new LocationHint.
* @param origin tells who produces this hint
* @param hint tells where this hint likes to stay
*/
public LocationHint( Origin origin, Hint hint ){
this( origin, hint, null );
}
/**
* Creates a new LocationHint.
* @param origin tells who produces this hint
* @param hint tells where this hint likes to stay
* @param clientObject an object that can be freely chosen and used by client code
*/
public LocationHint( Origin origin, Hint hint, Object clientObject ){
if( origin == null )
origin = UNKNOWN_ORIGIN;
if( hint == null )
hint = UNKNOWN_HINT;
this.origin = origin;
this.hint = hint;
this.clientObject = clientObject;
}
/**
* Gets the object which has no special meaning.
* @return the client-object
*/
public Object getClientObject(){
return clientObject;
}
/**
* Sets an object which has no special meaning. This object can
* be used freely by client code.
* @param clientObject the client-object
*/
public void setClientObject( Object clientObject ){
this.clientObject = clientObject;
}
/**
* Gets the origin of this hint.
* @return information who produced this hint
*/
public Origin getOrigin(){
return origin;
}
/**
* Gets the preferred location of this hint. It's up to the {@link ActionOffer}
* how to interpret this property.
* @return the preferred location
*/
public Hint getHint(){
return hint;
}
/**
* Describes the preferred location of a {@link LocationHint}
* @author Benjamin Sigg
*/
public static class Hint extends Enumeration{
/**
* Creates a new hint.
* @param id the unique id of this hint
*/
public Hint( String id ){
super( id );
}
}
/**
* Describes who created a {@link LocationHint}
* @author Benjamin Sigg
*/
public static class Origin extends Enumeration{
/**
* Creates a new origin
* @param id the unique id of this origin
*/
public Origin( String id ){
super( id );
}
}
/**
* Base-class for Enumerations (sets of uniquely identified objects).
* @author Benjamin Sigg
*/
public static class Enumeration{
/** The unique id of this enumeration */
private String id;
/**
* Creates a new Enumeration
* @param id a unique id
*/
public Enumeration( String id ){
if( id == null )
throw new IllegalArgumentException( "Identity must not be null" );
this.id = id;
}
/**
* Gets the id of this Enumeration
* @return the id
*/
public String getId(){
return id;
}
@Override
public boolean equals( Object obj ){
return (obj instanceof Enumeration) && ((Enumeration)obj).id.equals( id );
}
@Override
public int hashCode(){
return id.hashCode();
}
}
}