001    /*
002     * $Id: ColumnControlPopup.java 3100 2008-10-14 22:33:10Z rah003 $
003     *
004     * Copyright 2008 Sun Microsystems, Inc., 4150 Network Circle,
005     * Santa Clara, California 95054, U.S.A. All rights reserved.
006     *
007     * This library is free software; you can redistribute it and/or
008     * modify it under the terms of the GNU Lesser General Public
009     * License as published by the Free Software Foundation; either
010     * version 2.1 of the License, or (at your option) any later version.
011     *
012     * This library is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015     * Lesser General Public License for more details.
016     *
017     * You should have received a copy of the GNU Lesser General Public
018     * License along with this library; if not, write to the Free Software
019     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020     */
021    package org.jdesktop.swingx.table;
022    
023    import java.awt.ComponentOrientation;
024    import java.util.List;
025    
026    import javax.swing.Action;
027    import javax.swing.JComponent;
028    
029    import org.jdesktop.swingx.action.AbstractActionExt;
030    
031    /**
032     * Encapsulates the popup component which is the delegate for
033     * all popup visuals, used by a ColumnControlButton.
034     * <p>
035     * For now, this class a simple extraction of what a ColumnControl needs. 
036     * Usage will drive further evolution.
037     * 
038     */
039    public interface ColumnControlPopup {
040    
041        /**
042         * Updates all internal visuals after changing a UI-delegate. <p>
043         * 
044         * The method called by ColumnControlButton in it's updateUI.
045         * As there is a good probability that at the time of a
046         * ColumnControlButton is updated after a ui-delegate change the
047         * popup is not visible/part of the container hierarchy, this
048         * method must be messaged manually. 
049         * 
050         * @see javax.swing.JComponent#updateUI()
051         *
052         */
053        void updateUI();
054    
055        /**
056         * Toggles the popup's visibility. This method is responsible for
057         * placing itself relative to the given owner if toggled to visible.
058         * 
059         * @param owner the JComponent which triggered the visibility change, typically
060         *   a ColumnControlButton.
061         */
062        void toggleVisibility(JComponent owner);
063    
064        /**
065         * Applies the specified component orientation to all internal widgets.
066         * This method must be called by the owner if its component orientation 
067         * changes. 
068         * 
069         * @param o the componentOrientation to apply to all internal widgets.
070         * @see javax.swing.JComponent#applyComponentOrientation(ComponentOrientation).
071         */
072        void applyComponentOrientation(ComponentOrientation o);
073    
074        /**
075         * Removes all items from the popup. 
076         */
077        void removeAll();
078    
079        /**
080         * Adds items corresponding to the column's visibility actions.
081         * <p>
082         * Each <code>Action</code> in the list is a <code>stateAction</code>,
083         * its <code>selected</code> property bound to a column's
084         * <code>visible</code> property, that is toggling the selected will
085         * toggle the column's visibility (if the action is enabled).
086         * 
087         * The  <code>Action</code>s <code>name</code> property is bound to 
088         * the column's <code>title</code>.
089         * 
090         * @param actions List of AbstractActionExt to add.
091         */
092        void addVisibilityActionItems(List<? extends AbstractActionExt> actions);
093        // JW: dooohhh ... what a winding description ...
094        // sure need to have a better abstraction! 
095        // 
096        
097        /**
098         * Adds additional actions to the popup. 
099         * 
100         * @param actions List of <code>Action</code>s to add to the popup.
101         */
102        void addAdditionalActionItems(List<? extends Action> actions);
103    
104    }