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

bibliothek.gui.dock.event.VetoableDockFrontendEvent 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) 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
 * [email protected]
 * CH - Switzerland
 */
package bibliothek.gui.dock.event;

import java.util.Iterator;
import java.util.NoSuchElementException;

import bibliothek.gui.DockFrontend;
import bibliothek.gui.Dockable;

/**
 * Event that is received by a {@link VetoableDockFrontendListener}.
 * @author Benjamin Sigg
 *
 */
public class VetoableDockFrontendEvent implements Iterable{
    private DockFrontend frontend;
    private Dockable[] dockables;
    
    private boolean cancelable;
    private boolean canceled = false;
    private boolean expected;
    
    /**
     * Creates a new event
     * @param frontend the source of the event
     * @param cancelable whether the operation can be aborted
     * @param expected whether the event is expected or unexpected
     * @param dockables the elements which will be or is hidden, at least one entry
     * is required
     */
    public VetoableDockFrontendEvent( DockFrontend frontend, boolean cancelable, boolean expected, Dockable... dockables ){
        if( dockables.length < 1 )
            throw new IllegalArgumentException( "An empty event is not allowed" );
        
        this.frontend = frontend;
        this.dockables = dockables;
        this.cancelable = cancelable;
        this.expected = expected;
    }
    
    /**
     * Gets the source of the event.
     * @return the source, never null
     */
    public DockFrontend getFrontend() {
        return frontend;
    }
    
    /**
     * Gets the number of {@link Dockable}s which are in this event.
     * @return the number of elements
     */
    public int getDockableCount(){
        return dockables.length;
    }
    
    /**
     * Gets an element which will be or is hidden.
     * @param index the index of the element, the index 0 is always
     * valid.
     * @return the element, never null
     */
    public Dockable getDockable( int index ) {
        return dockables[ index ];
    }
    
    /**
     * Gets all the elements that are used in this event.
     * @return all the elements, modifications of this array will not affect
     * this event
     */
    public Dockable[] getDockables(){
        Dockable[] copy = new Dockable[ dockables.length ];
        System.arraycopy( dockables, 0, copy, 0, dockables.length );
        return copy;
    }
    
    public Iterator iterator() {
        return new Iterator(){
            private int index = 0;

            public boolean hasNext() {
                return index < dockables.length;
            }

            public Dockable next() {
                if( !hasNext() )
                    throw new NoSuchElementException();
                
                return dockables[ index++ ];
            }

            public void remove() {
                throw new UnsupportedOperationException();
            }            
        };
    }
    
    /**
     * Tells whether the operation can be canceled or not. If not,
     * then the result of {@link VetoableDockFrontendListener#hiding(VetoableDockFrontendEvent)}
     * will be ignored.
     * @return true if the operation can be stopped
     */
    public boolean isCancelable() {
        return cancelable;
    }
    
    /**
     * Aborts the operation. Has no effect if {@link #isCancelable()}
     * returns false or the operation is already executed.
     */
    public void cancel(){
        if( cancelable ){
            canceled = true;
        }
    }
    
    /**
     * Whether the operation is aborted or not.
     * @return true if the operation is aborted
     */
    public boolean isCanceled() {
        return canceled;
    }
    
    /**
     * Tells whether {@link VetoableDockFrontendListener#hiding(VetoableDockFrontendEvent)}
     * or {@link VetoableDockFrontendListener#showing(VetoableDockFrontendEvent)}
     * was called for this event or not.
* If true then this is a standard expected event that either happens * when the user clicks onto the close-action delivered by {@link DockFrontend}, * or if the client calls {@link DockFrontend#hide(Dockable, boolean)} or * {@link DockFrontend#show(Dockable, boolean)}.
* If false then this is an unexpected event that can have * any cause, e.g. loading a new layout. * @return whether the event is expected or unexpected */ public boolean isExpected() { return expected; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy