Listener for the selections in a manager

A class must implement the ManagerSelectionListener interface to be notified that selections in a manager have been modified. This interface contains only the selectionChanged method, which is called each time an object is selected or deselected.
void selectionChanged(ManagerSelectionChangedEvent event)  
To be notified of selections and deselections, a class must register itself using the following method of the class IlvManager :
void addManagerSelectionListener(ManagerSelectionListener l)   
Note that the selectionChanged method is called just after the object is selected or deselected, so you can easily determine whether it is a selection or a deselection. You do this in the following way:
class MyListener implements ManagerSelectionListener
{
  public void selectionChanged(ManagerSelectionChangedEvent event)
  {
    // retrieve the graphic object
    IlvGraphic obj  = event.getGraphic();
    IlvManager manager = event.getManager();
    if (manager.isSelected(obj)) {
      // object was selected
    } else {
      // object was deselected
    }
  }
}
When numerous objects are being selected, for example, as a result of a call to the selectAll method of the manager, many selection events will be sent to the selection listeners. This can be inefficient for some listeners that need to perform an action when the selection is stable. For example, a property inspector showing the properties of selected objects does not need to be updated for each individual selection when a number of objects are selected at the same time. To solve this kind of problem, the ManagerSelectionChangedEvent class has the following methods:
  • isAdjusting to tell you if the event is part of a series of selection events.
  • isAdjustmentEnd to indicate that the event is the last one of a series.
In the case of a “property inspector,” the listener would be as follows:
class MyListener implements ManagerSelectionListener
{
  public void selectionChanged(ManagerSelectionChangedEvent event)
  {
    if (!event.isAdjusting() || event.isAdjustmentEnd())
    { 
       // update the properties only if this is a single 
       // selection or the end of a series.
    }
  }
}
You may want to use the same “adjustment” notification when selecting numerous objects in a manager. The IlvManager class allows you to do this using the setSelectionAdjusting method:
boolean isAdjusting = manager.isSelectionAdjusting();
manager.setSelectionAdjusting(true);
try {
  // select or deselect a lot of objects.
} finally {
  manager.setSelectionAdjusting(isAdjusting);
}