package agg.attribute.util; import java.awt.Cursor; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionAdapter; import java.awt.event.MouseMotionListener; import java.util.Enumeration; import java.util.Vector; import javax.swing.JTable; /** * Dragging of table rows. * * @version $Id: TableRowDragger.java,v 1.4 2010/09/23 08:15:16 olga Exp $ * @author $Author: olga $ */ public class TableRowDragger { /** * Container with observers of this instance, all of which implement the * RowDragListener interface. */ protected transient Vector<RowDragListener> listener = new Vector<RowDragListener>( 10, 10); protected JTable tableView; protected boolean draggingStarted = false; protected int draggedRow = -1; protected Cursor defaultCursor; protected Cursor moveCursor = Cursor .getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); public TableRowDragger(JTable table) { this.tableView = table; MouseMotionListener dragMotionListener = new MouseMotionAdapter() { public void mouseDragged(MouseEvent e) { int row = TableRowDragger.this.tableView.rowAtPoint(e.getPoint()); if (row == -1) return; if (TableRowDragger.this.draggedRow != -1) { if (!TableRowDragger.this.draggingStarted && row != -1) { TableRowDragger.this.draggingStarted = true; TableRowDragger.this.defaultCursor = TableRowDragger.this.tableView.getCursor(); TableRowDragger.this.tableView.setCursor(TableRowDragger.this.moveCursor); fireDraggingStarted(TableRowDragger.this.draggedRow); } else if (TableRowDragger.this.draggingStarted) { if (row != TableRowDragger.this.draggedRow) { fireDraggingMoved(TableRowDragger.this.draggedRow, row); TableRowDragger.this.draggedRow = row; } } } } }; MouseListener dragStartStopListener = new MouseAdapter() { public void mousePressed(MouseEvent e) { int row = TableRowDragger.this.tableView.rowAtPoint(e.getPoint()); if (row != -1) { // && row < tuple.getNumberOfEntries()){ // System TableRowDragger.this.draggedRow = row; } } public void mouseReleased(MouseEvent e) { TableRowDragger.this.draggedRow = -1; if (TableRowDragger.this.draggingStarted) { TableRowDragger.this.draggingStarted = false; TableRowDragger.this.tableView.setCursor(TableRowDragger.this.defaultCursor); fireDraggingStopped(); } } }; this.tableView.addMouseListener(dragStartStopListener); this.tableView.addMouseMotionListener(dragMotionListener); } public boolean isDraggingActive() { return this.draggingStarted; } public void addRowDragListener(RowDragListener li) { if (!this.listener.contains(li)) { this.listener.addElement(li); } } public void removeRowDragListener(RowDragListener li) { this.listener.removeElement(li); } protected void fireDraggingStarted(int row) { RowDragListener li; RowDragEvent ev = new RowDragEvent(this, RowDragEvent.STARTED, row, row); for (Enumeration<RowDragListener> en = this.listener.elements(); en.hasMoreElements();) { li = en.nextElement(); li.draggingStarted(ev); } } protected void fireDraggingStopped() { RowDragListener li; RowDragEvent ev = new RowDragEvent(this, RowDragEvent.STOPPED, -1, -1); for (Enumeration<RowDragListener> en = this.listener.elements(); en.hasMoreElements();) { li = en.nextElement(); li.draggingStopped(ev); } } protected void fireDraggingMoved(int src, int dest) { RowDragListener li; RowDragEvent ev = new RowDragEvent(this, RowDragEvent.MOVED, src, dest); for (Enumeration<RowDragListener> en = this.listener.elements(); en.hasMoreElements();) { li = en.nextElement(); li.draggingMoved(ev); } } } /* * $Log: TableRowDragger.java,v $ * Revision 1.4 2010/09/23 08:15:16 olga * tuning * * Revision 1.3 2007/11/01 09:58:20 olga * Code refactoring: generic types- done * * Revision 1.2 2007/09/10 13:05:53 olga * In this update: * - package xerces2.5.0 is not used anymore; * - class com.objectspace.jgl.Pair is replaced by the agg own generic class agg.util.Pair; * - bugs fixed in: usage of PACs in rules; match completion; * usage of static method calls in attr. conditions * - graph editing: added some new features * Revision 1.1 2005/08/25 11:56:57 enrico *** * empty log message *** * * Revision 1.1 2005/05/30 12:58:04 olga Version with Eclipse * * Revision 1.3 2004/12/20 14:53:48 olga Changes because of matching * optimisation. * * Revision 1.2 2003/03/05 18:24:29 komm sorted/optimized import statements * * Revision 1.1.1.1 2002/07/11 12:17:06 olga Imported sources * * Revision 1.6 2000/06/05 14:08:16 shultzke Debugausgaben fuer V1.0.0b * geloescht * * Revision 1.5 2000/04/05 12:11:21 shultzke serialVersionUID aus V1.0.0 * generiert * */