/*
* 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) 2010 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.perspective;
import bibliothek.gui.dock.common.CMinimizeArea;
import bibliothek.gui.dock.common.intern.station.CommonDockStationFactory;
import bibliothek.gui.dock.common.mode.ExtendedMode;
import bibliothek.gui.dock.common.perspective.mode.CMinimizedModePerspective;
import bibliothek.gui.dock.common.perspective.mode.CModeAreaPerspective;
import bibliothek.gui.dock.layout.DockableProperty;
import bibliothek.gui.dock.perspective.PerspectiveDockable;
import bibliothek.gui.dock.perspective.PerspectiveStation;
import bibliothek.gui.dock.station.flap.FlapDockPerspective;
import bibliothek.gui.dock.station.flap.FlapDockProperty;
import bibliothek.gui.dock.station.support.PlaceholderMap;
import bibliothek.util.Path;
/**
* This {@link PerspectiveStation} represents a {@link CMinimizeArea}.
* @author Benjamin Sigg
*/
public class CMinimizePerspective implements CStationPerspective{
/** the intern representation of this perspective */
private CommonFlapDockPerspective delegate;
/** a unique identifier of this station */
private String id;
/** the owner of this object */
private CPerspective perspective;
/** The type of this perspective */
private Path typeId;
/** Whether this is a root station s*/
private boolean root = true;
/** the mode this station represents */
private CModeAreaPerspective mode = new CModeAreaPerspective() {
public String getUniqueId(){
return CMinimizePerspective.this.getUniqueId();
}
public boolean isChild( PerspectiveDockable dockable ){
return dockable.getParent() == intern();
}
public boolean isChildLocation( DockableProperty location ){
return location instanceof FlapDockProperty;
}
};
/**
* Creates a new, empty perspective.
* @param id the unique identifier of this perspective
*/
public CMinimizePerspective( String id ){
this( id, null );
}
/**
* Creates a new, empty perspective.
* @param id the unique identifier of this perspective
* @param typeId the type of this station, can be <code>null</code>
*/
public CMinimizePerspective( String id, Path typeId ){
if( id == null ){
throw new IllegalArgumentException( "id is null" );
}
this.id = id;
if( typeId == null ){
typeId = CMinimizeArea.TYPE_ID;
}
this.typeId = typeId;
delegate = new CommonFlapDockPerspective();
}
public void setPerspective( CPerspective perspective ){
if( this.perspective != null ){
CMinimizedModePerspective mode = (CMinimizedModePerspective) this.perspective.getLocationManager().getMode( ExtendedMode.MINIMIZED );
mode.remove( this.mode );
}
this.perspective = perspective;
if( this.perspective != null ){
CMinimizedModePerspective mode = (CMinimizedModePerspective) this.perspective.getLocationManager().getMode( ExtendedMode.MINIMIZED );
mode.add( this.mode );
}
}
public CPerspective getPerspective(){
return perspective;
}
public Path getTypeId(){
return typeId;
}
public boolean isRoot(){
return root;
}
public void setRoot( boolean root ){
this.root = root;
}
/**
* Adds <code>dockable</code> at the end of the list of children of this area.
* @param dockable the element to add
*/
public void add( CDockablePerspective dockable ){
delegate.add( dockable.intern().asDockable() );
}
/**
* Inserts <code>dockable</code> at location <code>index</code> to the list of children of this area.
* @param index the location of <code>dockable</code>
* @param dockable the element to insert
*/
public void insert( int index, CDockablePerspective dockable ){
delegate.insert( index, dockable.intern().asDockable() );
}
/**
* Adds a placeholder for <code>dockable</code> at the end of the list of children of this area.
* @param dockable the element for which a placeholder will be registered
*/
public void addPlaceholder( CDockablePerspective dockable ){
delegate.addPlaceholder( dockable.intern().asDockable() );
}
/**
* Adds a placeholder at the end of the list of children of this area.
* @param placeholder the new placeholder, not <code>null</code>
*/
public void addPlaceholder( Path placeholder ){
delegate.addPlaceholder( placeholder );
}
/**
* Inserts a placeholder for <code>dockable</code> at location <code>index</code> in the list of
* children of this area.
* @param index the location of the placeholder
* @param dockable the element for which a placeholder will be registered
*/
public void insertPlaceholder( int index, CDockablePerspective dockable ){
delegate.insertPlaceholder( index, dockable.intern().asDockable() );
}
/**
* Inserts a placeholder at location <code>index</code> in the list of
* children of this area.
* @param index the location of the placeholder
* @param placeholder the new placeholder, not <code>null</code>
*/
public void insertPlaceholder( int index, Path placeholder ){
delegate.insertPlaceholder( index, placeholder );
}
/**
* Gets the location of <code>dockable</code> on this area.
* @param dockable some child of this area
* @return the location or -1 if not found
*/
public int indexOf( CDockablePerspective dockable ){
return delegate.indexOf( dockable.intern().asDockable() );
}
/**
* Removes <code>dockable</code> from this area.
* @param dockable the element to remove
* @return <code>true</code> if <code>dockable</code> was found and removed,
* <code>false</code> otherwise
*/
public boolean remove( CDockablePerspective dockable ){
return delegate.remove( dockable.intern().asDockable() );
}
/**
* Removes the <code>index</code>'th child of this area.
* @param index the index of the child to remove
* @return the child that was removed, <code>null</code> if the child is not a {@link CDockablePerspective}
*/
public CDockablePerspective remove( int index ){
PerspectiveDockable dockable = delegate.remove( index );
if( dockable instanceof CommonElementPerspective ){
return ((CommonElementPerspective)dockable).getElement().asDockable();
}
else{
return null;
}
}
public CDockablePerspective asDockable(){
return null;
}
public CStationPerspective asStation(){
return this;
}
public String getFactoryID(){
return delegate.getFactoryID();
}
public String getUniqueId(){
return id;
}
public CommonFlapDockPerspective intern(){
return delegate;
}
public PlaceholderMap getPlaceholders(){
return delegate.getPlaceholders();
}
public void setPlaceholders( PlaceholderMap placeholders ){
delegate.setPlaceholders( placeholders );
}
public boolean isWorkingArea(){
return false;
}
/**
* The type of object that is used by {@link CMinimizePerspective} as intern representation.
* @author Benjamin Sigg
*/
public class CommonFlapDockPerspective extends FlapDockPerspective implements CommonDockStationPerspective{
public CElementPerspective getElement(){
return CMinimizePerspective.this;
}
@Override
public String getFactoryID(){
return CommonDockStationFactory.FACTORY_ID;
}
public String getConverterID(){
return super.getFactoryID();
}
}
}