edu.buffalo.fs7.qsymbol2
Class QubitSelectionModel

java.lang.Object
  |
  +--edu.buffalo.fs7.qsymbol2.QubitSelectionModel
All Implemented Interfaces:
java.lang.Cloneable, javax.swing.ListSelectionModel, java.io.Serializable

public class QubitSelectionModel
extends java.lang.Object
implements javax.swing.ListSelectionModel, java.lang.Cloneable, java.io.Serializable

This class copies a lot of the code of the original DefaultListSelectionModel. It is not necessarily the fine art of object oriented programming, but since the DefaultListSelectionModel declares a lot of the methods and variables private, that was the simplest way to extend the model to "remember" the order of the selection process as needed to encode the gates interactively.

Basically, what was added is a PriorityQueue to keep track of the selection order. The method getIndicesByPriority() returns the indices in the order of selection.

See Also:
PriorityQueue, ListSelectionModel, Serialized Form

Field Summary
protected  boolean leadAnchorNotificationEnabled
           
protected  javax.swing.event.EventListenerList listenerList
           
protected  PriorityQueue priorityQueue
           
 
Fields inherited from interface javax.swing.ListSelectionModel
MULTIPLE_INTERVAL_SELECTION, SINGLE_INTERVAL_SELECTION, SINGLE_SELECTION
 
Constructor Summary
QubitSelectionModel()
           
 
Method Summary
 void addListSelectionListener(javax.swing.event.ListSelectionListener l)
           
 void addSelectionInterval(int index0, int index1)
           
 void clearSelection()
           
 java.lang.Object clone()
          Returns a clone of this selection model with the same selection.
protected  void fireValueChanged(boolean isAdjusting)
          Notifies listeners that we have ended a series of adjustments.
protected  void fireValueChanged(int firstIndex, int lastIndex)
          Notifies ListSelectionListeners that the value of the selection, in the closed interval firstIndex, lastIndex, has changed.
protected  void fireValueChanged(int firstIndex, int lastIndex, boolean isAdjusting)
           
 int getAnchorSelectionIndex()
           
 java.util.Vector getIndicesByPriority()
          returns the selection as a vector of Integers.
 int getLeadSelectionIndex()
           
 java.util.EventListener[] getListeners(java.lang.Class listenerType)
          Returns an array of all the listeners of the given type that were added to this model.
 int getMaxSelectionIndex()
           
 int getMinSelectionIndex()
           
 int getSelectionMode()
          Returns the selection mode.
 boolean getValueIsAdjusting()
           
 void insertIndexInterval(int index, int length, boolean before)
          Insert length indices beginning before/after index.
 boolean isLeadAnchorNotificationEnabled()
          Returns the value of the leadAnchorNotificationEnabled flag.
 boolean isSelectedIndex(int index)
           
 boolean isSelectionEmpty()
           
 void removeIndexInterval(int index0, int index1)
          Remove the indices in the interval index0,index1 (inclusive) from the selection model.
 void removeListSelectionListener(javax.swing.event.ListSelectionListener l)
           
 void removeSelectionInterval(int index0, int index1)
           
 void setAnchorSelectionIndex(int anchorIndex)
          Set the anchor selection index, leaving all selection values unchanged.
 void setLeadAnchorNotificationEnabled(boolean flag)
          Sets the value of the leadAnchorNotificationEnabled flag.
 void setLeadSelectionIndex(int leadIndex)
          Sets the lead selection index, ensuring that values between the anchor and the new lead are either all selected or all deselected.
 void setSelectionInterval(int index0, int index1)
           
 void setSelectionMode(int selectionMode)
          Sets the selection mode.
 void setValueIsAdjusting(boolean isAdjusting)
           
 java.lang.String toString()
          Returns a string that displays and identifies this object's properties.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

listenerList

protected javax.swing.event.EventListenerList listenerList

leadAnchorNotificationEnabled

protected boolean leadAnchorNotificationEnabled

priorityQueue

protected PriorityQueue priorityQueue
Constructor Detail

QubitSelectionModel

public QubitSelectionModel()
Method Detail

getMinSelectionIndex

public int getMinSelectionIndex()
Specified by:
getMinSelectionIndex in interface javax.swing.ListSelectionModel

getMaxSelectionIndex

public int getMaxSelectionIndex()
Specified by:
getMaxSelectionIndex in interface javax.swing.ListSelectionModel

getValueIsAdjusting

public boolean getValueIsAdjusting()
Specified by:
getValueIsAdjusting in interface javax.swing.ListSelectionModel

getSelectionMode

public int getSelectionMode()
Returns the selection mode.
Specified by:
getSelectionMode in interface javax.swing.ListSelectionModel
Returns:
one of the these values:
  • SINGLE_SELECTION
  • SINGLE_INTERVAL_SELECTION
  • MULTIPLE_INTERVAL_SELECTION
See Also:
getSelectionMode()

setSelectionMode

public void setSelectionMode(int selectionMode)
Sets the selection mode. The default is MULTIPLE_INTERVAL_SELECTION.
Specified by:
setSelectionMode in interface javax.swing.ListSelectionModel
Parameters:
selectionMode - one of three values:
  • SINGLE_SELECTION
  • SINGLE_INTERVAL_SELECTION
  • MULTIPLE_INTERVAL_SELECTION
Throws:
java.lang.IllegalArgumentException - if selectionMode is not one of the legal values shown above
See Also:
setSelectionMode(int)

isSelectedIndex

public boolean isSelectedIndex(int index)
Specified by:
isSelectedIndex in interface javax.swing.ListSelectionModel

isSelectionEmpty

public boolean isSelectionEmpty()
Specified by:
isSelectionEmpty in interface javax.swing.ListSelectionModel

addListSelectionListener

public void addListSelectionListener(javax.swing.event.ListSelectionListener l)
Specified by:
addListSelectionListener in interface javax.swing.ListSelectionModel

removeListSelectionListener

public void removeListSelectionListener(javax.swing.event.ListSelectionListener l)
Specified by:
removeListSelectionListener in interface javax.swing.ListSelectionModel

fireValueChanged

protected void fireValueChanged(boolean isAdjusting)
Notifies listeners that we have ended a series of adjustments.

fireValueChanged

protected void fireValueChanged(int firstIndex,
                                int lastIndex)
Notifies ListSelectionListeners that the value of the selection, in the closed interval firstIndex, lastIndex, has changed.

fireValueChanged

protected void fireValueChanged(int firstIndex,
                                int lastIndex,
                                boolean isAdjusting)
Parameters:
firstIndex - the first index in the interval
lastIndex - the last index in the interval
isAdjusting - true if this is the final change in a series of adjustments
See Also:
EventListenerList

getListeners

public java.util.EventListener[] getListeners(java.lang.Class listenerType)
Returns an array of all the listeners of the given type that were added to this model.
Returns:
all of the objects receiving listenerType notifications from this model
Since:
1.3

setLeadAnchorNotificationEnabled

public void setLeadAnchorNotificationEnabled(boolean flag)
Sets the value of the leadAnchorNotificationEnabled flag.
See Also:
isLeadAnchorNotificationEnabled()

isLeadAnchorNotificationEnabled

public boolean isLeadAnchorNotificationEnabled()
Returns the value of the leadAnchorNotificationEnabled flag. When leadAnchorNotificationEnabled is true the model generates notification events with bounds that cover all the changes to the selection plus the changes to the lead and anchor indices. Setting the flag to false causes a narrowing of the event's bounds to include only the elements that have been selected or deselected since the last change. Either way, the model continues to maintain the lead and anchor variables internally. The default is true.
Returns:
the value of the leadAnchorNotificationEnabled flag
See Also:
setLeadAnchorNotificationEnabled(boolean)

clearSelection

public void clearSelection()
Specified by:
clearSelection in interface javax.swing.ListSelectionModel

setSelectionInterval

public void setSelectionInterval(int index0,
                                 int index1)
Specified by:
setSelectionInterval in interface javax.swing.ListSelectionModel

addSelectionInterval

public void addSelectionInterval(int index0,
                                 int index1)
Specified by:
addSelectionInterval in interface javax.swing.ListSelectionModel

removeSelectionInterval

public void removeSelectionInterval(int index0,
                                    int index1)
Specified by:
removeSelectionInterval in interface javax.swing.ListSelectionModel

insertIndexInterval

public void insertIndexInterval(int index,
                                int length,
                                boolean before)
Insert length indices beginning before/after index. If the value at index is itself selected, set all of the newly inserted items, otherwise leave them unselected. This method is typically called to sync the selection model with a corresponding change in the data model.
Specified by:
insertIndexInterval in interface javax.swing.ListSelectionModel

removeIndexInterval

public void removeIndexInterval(int index0,
                                int index1)
Remove the indices in the interval index0,index1 (inclusive) from the selection model. This is typically called to sync the selection model width a corresponding change in the data model. Note that (as always) index0 need not be <= index1.
Specified by:
removeIndexInterval in interface javax.swing.ListSelectionModel

setValueIsAdjusting

public void setValueIsAdjusting(boolean isAdjusting)
Specified by:
setValueIsAdjusting in interface javax.swing.ListSelectionModel

toString

public java.lang.String toString()
Returns a string that displays and identifies this object's properties.
Overrides:
toString in class java.lang.Object
Returns:
a String representation of this object

clone

public java.lang.Object clone()
                       throws java.lang.CloneNotSupportedException
Returns a clone of this selection model with the same selection. listenerLists are not duplicated.
Overrides:
clone in class java.lang.Object
Throws:
java.lang.CloneNotSupportedException - if the selection model does not both (a) implement the Cloneable interface and (b) define a clone method.

getAnchorSelectionIndex

public int getAnchorSelectionIndex()
Specified by:
getAnchorSelectionIndex in interface javax.swing.ListSelectionModel

getLeadSelectionIndex

public int getLeadSelectionIndex()
Specified by:
getLeadSelectionIndex in interface javax.swing.ListSelectionModel

setAnchorSelectionIndex

public void setAnchorSelectionIndex(int anchorIndex)
Set the anchor selection index, leaving all selection values unchanged. If leadAnchorNotificationEnabled is true, send a notification covering the old and new anchor cells.
Specified by:
setAnchorSelectionIndex in interface javax.swing.ListSelectionModel
See Also:
getAnchorSelectionIndex(), setLeadSelectionIndex(int)

setLeadSelectionIndex

public void setLeadSelectionIndex(int leadIndex)
Sets the lead selection index, ensuring that values between the anchor and the new lead are either all selected or all deselected. If the value at the anchor index is selected, first clear all the values in the range [anchor, oldLeadIndex], then select all the values values in the range [anchor, newLeadIndex], where oldLeadIndex is the old leadIndex and newLeadIndex is the new one.

If the value at the anchor index is not selected, do the same thing in reverse selecting values in the old range and deslecting values in the new one.

Generate a single event for this change and notify all listeners. For the purposes of generating minimal bounds in this event, do the operation in a single pass; that way the first and last index inside the ListSelectionEvent that is broadcast will refer to cells that actually changed value because of this method. If, instead, this operation were done in two steps the effect on the selection state would be the same but two events would be generated and the bounds around the changed values would be wider, including cells that had been first cleared only to later be set.

This method can be used in the mouseDragged method of a UI class to extend a selection.

Specified by:
setLeadSelectionIndex in interface javax.swing.ListSelectionModel
See Also:
getLeadSelectionIndex(), setAnchorSelectionIndex(int)

getIndicesByPriority

public java.util.Vector getIndicesByPriority()
returns the selection as a vector of Integers.