/**
* Provides the drag and drop functionality for
* {@link org.signalml.app.view.montage.MontageChannelsPanel}.
* With the use of this functionality the indexes of
* {@link org.signalml.app.view.montage.dnd.SourceChannelIndices source} and
* {@link org.signalml.app.view.montage.dnd.MontageChannelIndices montage}
* channels are transfered.
* The indexes can be transfered:
* <ul>
* <li>from {@link org.signalml.app.view.montage.SourceMontageTable
* SourceMontageTable} to {@link org.signalml.app.view.montage.MontageTable
* MontageTable} - the new {@link org.signalml.domain.montage.MontageChannel
* montage channels} basing on the selected
* {@link org.signalml.domain.montage.SourceChannel source channels} are added
* to the {@link org.signalml.domain.montage.Montage montage},</li>
* <li>from MontageTable to
* {@link org.signalml.app.view.montage.dnd.MontageWasteBasket
* MontageWasteBasket} - the selected montage channels are removed from the
* montage,</li>
* <li>from MontageTable to MontageTable - the order (the indexes) of montage
* channels is changed - the selected channels are moved to the specified
* index.</li>
* </ul>
* There are 4 types of classes in this package:
* <ul>
* <li>The {@link java.awt.datatransfer.DataFlavor data flavors} - they are
* responsible for identifying the type of the data. We have:
* <ul>
* <li>{@link org.signalml.app.view.montage.dnd.MontageChannelsDataFlavor
* MontageChannelsDataFlavor} - it states for MontageChannelIndices.</li>
* <li>{@link org.signalml.app.view.montage.dnd.SourceMontageChannelsDataFlavor
* SourceMontageChannelsDataFlavor} - it states for SourceChannelIndices.</li>
* </ul></li>
* <li>The {@link java.awt.datatransfer.Transferable transferable} objects -
* they encapsulate the data for transportation. We have:
* <ul>
* <li>{@link org.signalml.app.view.montage.dnd.MontageTransferable
* MontageTransferable} which encapsulates MontageChannelIndices,</li>
* <li>{@link org.signalml.app.view.montage.dnd.SourceMontageTransferable
* SourceMontageTransferable} which encapsulates SourceChannelIndices.</li>
* </ul></li>
* <li>The {@link javax.swing.TransferHandler transfer handlers} - they are
* responsible for performing actions if the objects are dragged from or
* dropped on the object to which they are attached. We have:
* <ul>
* <li>{@link org.signalml.app.view.montage.dnd.MontageTableTransferHandler
* MontageTableTransferHandler} which is attached to the MontageTable and:
* <ul>
* <li>creates the list of indexes if the rows of the table are dragged,</li>
* <li>adds the new montage channels to the montage if the SourceChannelIndices
* are dropped,</li>
* <li>moves the channels to the specified index if the MontageChannelIndices
* are dropped.</li>
* </ul></li>
* <li>{@link org.signalml.app.view.montage.dnd.MontageWasteBasketTransferHandler
* MontageWasteBasketTransferHandler} which is attached to the
* MontageWasteBasket and:
* <ul>
* <li>removes the channels from the montage if the MontageChannelIndices
* are dropped.</li>
* </ul></li>
* <li>{@link org.signalml.app.view.montage.dnd.SourceMontageTableTransferHandler
* SourceMontageTableTransferHandler} which is attached to the
* SourceMontageTable and:
* <ul>
* <li>creates the list of indexes if the rows of the table are dragged.</li>
* </ul></li>
* </ul></li>
* <li>The transferred objects which are encapsulated in transferable objects.
* We have:
* <ul>
* <li>SourceChannelIndices which contain the indexes of source channels,</li>
* <li>MontageChannelIndices which contain the indexes of montage channels.</li>
* </ul></li></ul>
*/
package org.signalml.app.view.montage.dnd;