mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			333 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			333 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* ListSelectionModel.java --
 | |
|    Copyright (C) 2002, 2006, Free Software Foundation, Inc.
 | |
| 
 | |
| This file is part of GNU Classpath.
 | |
| 
 | |
| GNU Classpath is free software; you can redistribute it and/or modify
 | |
| it under the terms of the GNU General Public License as published by
 | |
| the Free Software Foundation; either version 2, or (at your option)
 | |
| any later version.
 | |
| 
 | |
| GNU Classpath 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
 | |
| General Public License for more details.
 | |
| 
 | |
| You should have received a copy of the GNU General Public License
 | |
| along with GNU Classpath; see the file COPYING.  If not, write to the
 | |
| Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 USA.
 | |
| 
 | |
| Linking this library statically or dynamically with other modules is
 | |
| making a combined work based on this library.  Thus, the terms and
 | |
| conditions of the GNU General Public License cover the whole
 | |
| combination.
 | |
| 
 | |
| As a special exception, the copyright holders of this library give you
 | |
| permission to link this library with independent modules to produce an
 | |
| executable, regardless of the license terms of these independent
 | |
| modules, and to copy and distribute the resulting executable under
 | |
| terms of your choice, provided that you also meet, for each linked
 | |
| independent module, the terms and conditions of the license of that
 | |
| module.  An independent module is a module which is not derived from
 | |
| or based on this library.  If you modify this library, you may extend
 | |
| this exception to your version of the library, but you are not
 | |
| obligated to do so.  If you do not wish to do so, delete this
 | |
| exception statement from your version. */
 | |
| 
 | |
| 
 | |
| package javax.swing;
 | |
| 
 | |
| import javax.swing.event.ListSelectionEvent;
 | |
| import javax.swing.event.ListSelectionListener;
 | |
| 
 | |
| /**
 | |
|  * A model that tracks the selection status of a list of items.  Each item in
 | |
|  * the list is identified by a zero-based index only, so the model can be used
 | |
|  * to track the selection status of any type of list.  The model
 | |
|  * supports three modes:
 | |
|  * <ul>
 | |
|  * <li><code>SINGLE_SELECTION</code> - only one item in the list may be
 | |
|  *     selected;</li>
 | |
|  * <li><code>SINGLE_INTERVAL_SELECTION</code> - only one interval in the list
 | |
|  *     may be selected;</li>
 | |
|  * <li><code>MULTIPLE_INTERVAL_SELECTION</code> - any combination of items in
 | |
|  *     the list may be selected.</li>
 | |
|  * </ul>
 | |
|  * The model uses an event notification mechanism to notify listeners (see
 | |
|  * {@link ListSelectionListener}) about updates to the selection model.
 | |
|  * <p>
 | |
|  * This model is used to track row selections in the {@link JList} component,
 | |
|  * and row and column selections in the {@link JTable} component.
 | |
|  */
 | |
| public interface ListSelectionModel
 | |
| {
 | |
| 
 | |
|   /**
 | |
|    * A selection mode in which only one item can be selected.
 | |
|    *
 | |
|    * @see #setSelectionMode(int)
 | |
|    */
 | |
|   int SINGLE_SELECTION = 0;
 | |
| 
 | |
|   /**
 | |
|    * A selection mode in which a single interval can be selected (an interval
 | |
|    * is a range containing one or more contiguous items).
 | |
|    *
 | |
|    * @see #setSelectionMode(int)
 | |
|    */
 | |
|   int SINGLE_INTERVAL_SELECTION = 1;
 | |
| 
 | |
|   /**
 | |
|    * A selection mode in which any combination of items can be selected.
 | |
|    *
 | |
|    * @see #setSelectionMode(int)
 | |
|    */
 | |
|   int MULTIPLE_INTERVAL_SELECTION = 2;
 | |
| 
 | |
|   /**
 | |
|    * Sets the selection mode.
 | |
|    * <p>
 | |
|    * FIXME: The spec is silent about what happens to existing selections, for
 | |
|    * example when changing from an interval selection to single selection.
 | |
|    *
 | |
|    * @param mode  one of {@link #SINGLE_SELECTION},
 | |
|    *     {@link #SINGLE_INTERVAL_SELECTION} and
 | |
|    *     {@link #MULTIPLE_INTERVAL_SELECTION}.
 | |
|    *
 | |
|    * @see #getSelectionMode()
 | |
|    *
 | |
|    * @throws IllegalArgumentException if <code>mode</code> is not one of the
 | |
|    *     specified values.
 | |
|    */
 | |
|   void setSelectionMode(int mode);
 | |
| 
 | |
|   /**
 | |
|    * Returns the selection mode, which is one of {@link #SINGLE_SELECTION},
 | |
|    * {@link #SINGLE_INTERVAL_SELECTION} and
 | |
|    * {@link #MULTIPLE_INTERVAL_SELECTION}.
 | |
|    *
 | |
|    * @return The selection mode.
 | |
|    *
 | |
|    * @see #setSelectionMode(int)
 | |
|    */
 | |
|   int getSelectionMode();
 | |
| 
 | |
|   /**
 | |
|    * Clears the current selection from the model.  If the selection state
 | |
|    * changes (that is, the existing selection is non-empty) a
 | |
|    * {@link ListSelectionEvent} should be sent to all registered listeners.
 | |
|    * <p>
 | |
|    * FIXME: what happens to the anchor and lead selection indices (the spec
 | |
|    * is silent about this)?  See:
 | |
|    * <p>
 | |
|    * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4334792
 | |
|    */
 | |
|   void clearSelection();
 | |
| 
 | |
|   /**
 | |
|    * Returns the lowest selected index, or <code>-1</code> if there is no
 | |
|    * selection.
 | |
|    *
 | |
|    * @return The lowest selected index.
 | |
|    *
 | |
|    * @see #getMaxSelectionIndex()
 | |
|    */
 | |
|   int getMinSelectionIndex();
 | |
| 
 | |
|   /**
 | |
|    * Returns the highest selected index, or <code>-1</code> if there is no
 | |
|    * selection.
 | |
|    *
 | |
|    * @return The highest selected index.
 | |
|    *
 | |
|    * @see #getMinSelectionIndex()
 | |
|    */
 | |
|   int getMaxSelectionIndex();
 | |
| 
 | |
|   /**
 | |
|    * Returns <code>true</code> if the specified item is selected, and
 | |
|    * <code>false</code> otherwise.  Special note: if <code>index</code> is
 | |
|    * negative, this method should return <code>false</code> (no exception
 | |
|    * should be thrown).
 | |
|    *
 | |
|    * @param index  the item index (zero-based).
 | |
|    *
 | |
|    * @return <code>true</code> if the specified item is selected, and
 | |
|    *     <code>false</code> otherwise.
 | |
|    */
 | |
|   boolean isSelectedIndex(int index);
 | |
| 
 | |
|   /**
 | |
|    * Returns <code>true</code> if there is no selection, and <code>false</code>
 | |
|    * otherwise.
 | |
|    *
 | |
|    * @return  <code>true</code> if there is no selection, and
 | |
|    *     <code>false</code> otherwise.
 | |
|    */
 | |
|   boolean isSelectionEmpty();
 | |
| 
 | |
|   /**
 | |
|    * Sets the selection interval to the specified range (note that
 | |
|    * <code>anchor</code> can be less than, equal to, or greater than
 | |
|    * <code>lead</code>).  If this results in the selection being changed,
 | |
|    * a {@link ListSelectionEvent} is sent to all registered listeners.
 | |
|    * <p>
 | |
|    * If the selection mode is {@link #SINGLE_SELECTION}, only the
 | |
|    * <code>lead</code> item is selected.
 | |
|    *
 | |
|    * @param anchor  the anchor index.
 | |
|    * @param lead  the lead index.
 | |
|    */
 | |
|   void setSelectionInterval(int anchor, int lead);
 | |
| 
 | |
|   /**
 | |
|    * Marks the items in the specified interval as selected.  The behaviour of
 | |
|    * this method depends on the selection mode:
 | |
|    * <ul>
 | |
|    * <li><code>SINGLE_SELECTION</code> - only the <code>lead</code> item is
 | |
|    *     selected;</li>
 | |
|    * <li><code>SINGLE_INTERVAL_SELECTION</code> - the existing selection
 | |
|    *     interval is replaced by the specified interval;</li>
 | |
|    * <li><code>MULTIPLE_INTERVAL_SELECTION</code> - the specified interval is
 | |
|    *     merged into the currently selected intervals.</li>
 | |
|    * </ul>
 | |
|    * Note that <code>anchor</code> can be less than, equal to, or greater than
 | |
|    * <code>lead</code>.
 | |
|    *
 | |
|    * @param anchor  the index of the anchor item
 | |
|    * @param lead  the index of the lead item.
 | |
|    */
 | |
|   void addSelectionInterval(int anchor, int lead);
 | |
| 
 | |
|   /**
 | |
|    * Marks the items in the specified interval as not selected.  The behaviour
 | |
|    * of this method depends on the selection mode:
 | |
|    * <ul>
 | |
|    * <li><code>SINGLE_SELECTION</code> - XXX;</li>
 | |
|    * <li><code>SINGLE_INTERVAL_SELECTION</code> - XXX;</li>
 | |
|    * <li><code>MULTIPLE_INTERVAL_SELECTION</code> - XXX.</li>
 | |
|    * </ul>
 | |
|    * Note that <code>anchor</code> can be less than, equal to, or greater than
 | |
|    * <code>lead</code>.
 | |
|    *
 | |
|    * @param anchor  the index of the anchor item
 | |
|    * @param lead  the index of the lead item.
 | |
|    */
 | |
|   void removeSelectionInterval(int anchor, int lead);
 | |
| 
 | |
|   /**
 | |
|    * Inserts a new interval containing <code>length</code> items at the
 | |
|    * specified <code>index</code> (the <code>before</code> flag indicates
 | |
|    * whether the range is inserted before or after the existing item at
 | |
|    * <code>index</code>).
 | |
|    *
 | |
|    * FIXME: What is the selection status of the new items? Bug 4870694.
 | |
|    * FIXME: What event is generated?
 | |
|    *
 | |
|    * @param index  the index of the item.
 | |
|    * @param length  the number of items in the interval to be inserted.
 | |
|    * @param before  if <code>true</code>, the interval should be inserted
 | |
|    *     before <code>index</code>, otherwise it is inserted after.
 | |
|    *
 | |
|    * @see #removeIndexInterval(int, int)
 | |
|    */
 | |
|   void insertIndexInterval(int index, int length, boolean before);
 | |
| 
 | |
|   /**
 | |
|    * Removes the items in the specified range (inclusive) from the selection
 | |
|    * model.  This method should be called when an interval is deleted from
 | |
|    * the underlying list.
 | |
|    *
 | |
|    * FIXME: what happens to the lead and anchor indices if they are part of
 | |
|    * the range that is removed?
 | |
|    * FIXME: what event is generated
 | |
|    *
 | |
|    * @param index0  XXX
 | |
|    * @param index1  XXX
 | |
|    *
 | |
|    * @see #insertIndexInterval(int, int, boolean)
 | |
|    */
 | |
|   void removeIndexInterval(int index0, int index1);
 | |
| 
 | |
|   /**
 | |
|    * Returns the index of the anchor item.
 | |
|    *
 | |
|    * @return The index of the anchor item.
 | |
|    *
 | |
|    * @see #setAnchorSelectionIndex(int)
 | |
|    */
 | |
|   int getAnchorSelectionIndex();
 | |
| 
 | |
|   /**
 | |
|    * Sets the index of the anchor item.
 | |
|    *
 | |
|    * @param index  the item index.
 | |
|    *
 | |
|    * @see #getAnchorSelectionIndex()
 | |
|    */
 | |
|   void setAnchorSelectionIndex(int index);
 | |
| 
 | |
|   /**
 | |
|    * Returns the index of the lead item.
 | |
|    *
 | |
|    * @return The index of the lead item.
 | |
|    *
 | |
|    * @see #setLeadSelectionIndex(int)
 | |
|    */
 | |
|   int getLeadSelectionIndex();
 | |
| 
 | |
|   /**
 | |
|    * Sets the index of the lead item.
 | |
|    *
 | |
|    * @param index  the item index.
 | |
|    *
 | |
|    * @see #getLeadSelectionIndex()
 | |
|    */
 | |
|   void setLeadSelectionIndex(int index);
 | |
| 
 | |
|   /**
 | |
|    * Sets the flag that is passed to listeners for each change notification.
 | |
|    * If a sequence of changes is made to the selection model, this flag should
 | |
|    * be set to <code>true</code> at the start of the sequence, and
 | |
|    * <code>false</code> for the last change - this gives listeners the option
 | |
|    * to ignore interim changes if that is more efficient.
 | |
|    *
 | |
|    * @param valueIsAdjusting  the flag value.
 | |
|    *
 | |
|    * @see #getValueIsAdjusting()
 | |
|    */
 | |
|   void setValueIsAdjusting(boolean valueIsAdjusting);
 | |
| 
 | |
|   /**
 | |
|    * Returns a flag that is passed to registered listeners when changes are
 | |
|    * made to the model.  See the description for
 | |
|    * {@link #setValueIsAdjusting(boolean)} for more information.
 | |
|    *
 | |
|    * @return The flag.
 | |
|    */
 | |
|   boolean getValueIsAdjusting();
 | |
| 
 | |
|   /**
 | |
|    * Registers a listener with the model so that it receives notification
 | |
|    * of changes to the model.
 | |
|    *
 | |
|    * @param listener  the listener (<code>null</code> ignored).
 | |
|    *
 | |
|    * @see #removeListSelectionListener(ListSelectionListener)
 | |
|    */
 | |
|   void addListSelectionListener(ListSelectionListener listener);
 | |
| 
 | |
|   /**
 | |
|    * Deregisters a listener so that it no longer receives notification of
 | |
|    * changes to the model.  If the specified listener is not registered with
 | |
|    * the model, or is <code>null</code>, this method does nothing.
 | |
|    *
 | |
|    * @param listener  the listener (<code>null</code> ignored).
 | |
|    *
 | |
|    * @see #addListSelectionListener(ListSelectionListener)
 | |
|    */
 | |
|   void removeListSelectionListener(ListSelectionListener listener);
 | |
| 
 | |
| }
 |