All Downloads are FREE. Search and download functionalities are using the official Maven repository.

bibliothek.gui.dock.common.action.predefined.CCloseAction Maven / Gradle / Ivy

The newest version!
/*
 * 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
 * [email protected]
 * CH - Switzerland
 */
package bibliothek.gui.dock.common.action.predefined;

import javax.swing.JOptionPane;
import javax.swing.KeyStroke;

import bibliothek.extension.gui.dock.theme.eclipse.EclipseTabDockAction;
import bibliothek.gui.Dockable;
import bibliothek.gui.dock.common.CControl;
import bibliothek.gui.dock.common.action.CAction;
import bibliothek.gui.dock.common.action.core.CommonDropDownItem;
import bibliothek.gui.dock.common.event.CVetoClosingListener;
import bibliothek.gui.dock.common.intern.CDockable;
import bibliothek.gui.dock.common.intern.CommonDockable;
import bibliothek.gui.dock.common.intern.action.CDropDownItem;
import bibliothek.gui.dock.facile.action.CloseAction;
import bibliothek.gui.dock.util.DockProperties;
import bibliothek.gui.dock.util.PropertyValue;

/**
 * An action that can close any {@link CDockable} by calling
 * {@link CDockable#setVisible(boolean)}. Clients can either create one 
 * {@link CCloseAction} for each {@link CDockable} or use one action for many {@link CDockable}s at the
 * same time.
 * @author Benjamin Sigg
 */
@EclipseTabDockAction
public class CCloseAction extends CDropDownItem{
    /** the control for which this action works */
    private CControl control;
    
    /** the keystroke used to trigger this action */
    private PropertyValue keyClose = new PropertyValue( CControl.KEY_CLOSE ){
        @Override
        protected void valueChanged( KeyStroke oldValue, KeyStroke newValue ) {
            setAccelerator( newValue );
        }
    };
    
    /**
     * Creates a new action
     * @param control the control for which this action will be used
     */
    public CCloseAction( CControl control ) {
        super( null );
        if( control == null )
            throw new NullPointerException( "control is null" );
        
        this.control = control;
        init( createAction() );
    }
    
    /**
     * Creates the action that is used for {@link #intern()}.
     * @return the internal representation of this action
     */
    protected Action createAction(){
    	return new Action();
    }
    
    /**
     * Closes dockable now. This method is always called when
     * this action is triggered, so this is the optimal method to be overridden
     * and extended with new features like a {@link JOptionPane} asking whether
     * dockable should really be closed.
* Note: Consider using the {@link CVetoClosingListener} instead, it can * handle all kind of closing events. * @param dockable the element to close */ public void close( CDockable dockable ){ if( dockable.isVisible() ){ dockable.setVisible( false ); } } /** * Internal representation of the {@link CCloseAction}, just calls * {@link CCloseAction#close(CDockable)} when triggered. * @author Benjamin Sigg */ public class Action extends CloseAction implements CommonDropDownItem{ /** how often this action was bound */ private int count = 0; /** * Creates a new action */ public Action(){ super( null ); } @Override protected void close( Dockable dockable ) { if( dockable instanceof CommonDockable ){ CCloseAction.this.close( ((CommonDockable)dockable).getDockable() ); } else super.close( dockable ); } @Override protected void bound( Dockable dockable ) { super.bound( dockable ); if( count == 0 ){ setController( control.intern().getController() ); keyClose.setProperties( control.intern().getController() ); } count++; } @Override protected void unbound( Dockable dockable ) { super.unbound( dockable ); count--; if( count == 0 ){ setController( null ); keyClose.setProperties( (DockProperties)null ); } } public CAction getAction(){ return CCloseAction.this; } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy