/*
* 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.common.intern.action;
import java.util.Set;
import javax.swing.Icon;
import bibliothek.gui.Dockable;
import bibliothek.gui.dock.action.ActionContentModifier;
import bibliothek.gui.dock.action.SelectableDockAction;
import bibliothek.gui.dock.common.action.CAction;
import bibliothek.gui.dock.common.action.core.CommonSelectableAction;
import bibliothek.gui.dock.event.SelectableDockActionListener;
import bibliothek.util.FrameworkOnly;
/**
* An action which is either selected or deselected.
* @author Benjamin Sigg
* @param <A> the kind of action representing this {@link CAction}
*/
@FrameworkOnly
public abstract class CSelectableAction<A extends CommonSelectableAction> extends CDropDownItem<A>{
/**
* Creates a new action
* @param action the internal representation
*/
protected CSelectableAction( A action ){
super( null );
if( action != null ){
init( action );
}
}
protected void init(A action){
super.init( action );
action.addSelectableListener( new SelectableDockActionListener(){
public void selectedChanged( SelectableDockAction action, Set<Dockable> dockables ) {
changed();
}
});
}
/**
* Called when {@link #isSelected() selected}-state of this action
* changed.
*/
protected abstract void changed();
/**
* Sets the selected-state.
* @param selected the new state
*/
public void setSelected( boolean selected ){
intern().setSelected( selected );
}
/**
* Tells whether this action is selected or not.
* @return <code>true</code> if the action is selected
*/
public boolean isSelected(){
return intern().isSelected();
}
/**
* Sets the icon that will be shown when this action is selected.
* @param icon the icon or <code>null</code>
*/
public void setSelectedIcon( Icon icon ){
intern().setSelectedIcon( ActionContentModifier.NONE, icon );
}
/**
* Gets the icon that is shown when this action is selected.
* @return the icon or <code>null</code>
*/
public Icon getSelectedIcon(){
return intern().getSelectedIcon( ActionContentModifier.NONE );
}
/**
* Sets the icon which is used if the mouse is hovering over a button that represents this action and
* if this action is selected.
* @param icon the icon or <code>null</code>
*/
public void setSelectedHoverIcon( Icon icon ){
intern().setSelectedIcon( ActionContentModifier.NONE_HOVER, icon );
}
/**
* Gets the icon which is used if the mouse is hovering over a button that represents this action and
* if this action is selected.
* @return the icon or <code>null</code>
*/
public Icon getSelectedHoverIcon(){
return intern().getSelectedIcon( ActionContentModifier.NONE_HOVER );
}
/**
* Sets the icon which is used if the mouse is pressed over a button that represents this action and
* if this action is selected.
* @param icon the icon or <code>null</code>
*/
public void setSelectedPressedIcon( Icon icon ){
intern().setSelectedIcon( ActionContentModifier.NONE_PRESSED, icon );
}
/**
* Gets the icon which is used if the mouse is pressed over a button that represents this action and
* if this action is selected.
* @return the icon, can be <code>null</code>
*/
public Icon getSelectedPressedIcon(){
return intern().getSelectedIcon( ActionContentModifier.NONE_PRESSED );
}
/**
* Sets the icon which is used if the mouse is hovering over a button that represents this action and
* if this action is disabled and selected.
* @param icon the icon or <code>null</code>
*/
public void setDisabledSelectedHoverIcon( Icon icon ){
intern().setSelectedIcon( ActionContentModifier.DISABLED_HOVER, icon );
}
/**
* Gets the icon which is used if the mouse is hovering over a button that represents this action and
* if this action is disabled and selected.
* @return the icon or <code>null</code>
*/
public Icon getDisabledSelectedHoverIcon(){
return intern().getSelectedIcon( ActionContentModifier.DISABLED_HOVER );
}
/**
* Sets the icon which is used if the mouse is pressed over a button that represents this action and
* if this action is disabled and selected.
* @param icon the icon or <code>null</code>
*/
public void setDisabledSelectedPressedIcon( Icon icon ){
intern().setSelectedIcon( ActionContentModifier.DISABLED_PRESSED, icon );
}
/**
* Gets the icon which is used if the mouse is pressed over a button that represents this action and
* if this action is disabled and selected.
* @return the icon, can be <code>null</code>
*/
public Icon getDisabledSelectedPressedIcon(){
return intern().getSelectedIcon( ActionContentModifier.DISABLED_PRESSED );
}
}