2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
package net.sourceforge.filebot.ui.panel.sfv;
|
|
|
|
|
|
|
|
|
2008-09-14 09:19:21 -04:00
|
|
|
import java.awt.dnd.DnDConstants;
|
|
|
|
import java.awt.event.MouseEvent;
|
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
import javax.swing.JTable;
|
|
|
|
import javax.swing.ListSelectionModel;
|
2008-09-14 09:19:21 -04:00
|
|
|
import javax.swing.event.MouseInputListener;
|
2008-03-24 05:44:23 -04:00
|
|
|
import javax.swing.event.TableModelEvent;
|
2008-09-14 09:19:21 -04:00
|
|
|
import javax.swing.plaf.basic.BasicTableUI;
|
2007-12-23 14:28:04 -05:00
|
|
|
import javax.swing.table.TableColumn;
|
|
|
|
import javax.swing.table.TableModel;
|
|
|
|
|
2008-03-24 05:44:23 -04:00
|
|
|
import net.sourceforge.filebot.ui.panel.sfv.ChecksumTableModel.ChecksumTableModelEvent;
|
2007-12-26 11:48:28 -05:00
|
|
|
import net.sourceforge.filebot.ui.transfer.DefaultTransferHandler;
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
class SfvTable extends JTable {
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2008-06-02 15:12:28 -04:00
|
|
|
private final SfvTransferablePolicy transferablePolicy;
|
2008-07-30 18:37:01 -04:00
|
|
|
private final ChecksumTableExportHandler exportHandler;
|
|
|
|
|
|
|
|
private final ChecksumComputationService checksumComputationService = new ChecksumComputationService();
|
2007-12-23 14:28:04 -05:00
|
|
|
|
|
|
|
|
|
|
|
public SfvTable() {
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
transferablePolicy = new SfvTransferablePolicy(getModel(), checksumComputationService);
|
|
|
|
exportHandler = new ChecksumTableExportHandler(getModel());
|
2008-06-02 15:12:28 -04:00
|
|
|
|
|
|
|
setFillsViewportHeight(true);
|
2007-12-23 14:28:04 -05:00
|
|
|
setAutoCreateRowSorter(true);
|
|
|
|
setAutoCreateColumnsFromModel(true);
|
|
|
|
setAutoResizeMode(AUTO_RESIZE_SUBSEQUENT_COLUMNS);
|
|
|
|
|
|
|
|
setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
|
|
|
|
|
|
|
|
setRowHeight(20);
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
setTransferHandler(new DefaultTransferHandler(transferablePolicy, exportHandler));
|
2007-12-26 11:48:28 -05:00
|
|
|
setDragEnabled(true);
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2008-09-14 09:19:21 -04:00
|
|
|
setUI(new DragDropRowTableUI());
|
|
|
|
|
2008-09-06 14:41:08 -04:00
|
|
|
setDefaultRenderer(String.class, new FileNameTableCellRenderer());
|
2007-12-23 14:28:04 -05:00
|
|
|
setDefaultRenderer(ChecksumRow.State.class, new StateIconTableCellRenderer());
|
|
|
|
setDefaultRenderer(Checksum.class, new ChecksumTableCellRenderer());
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
public SfvTransferablePolicy getTransferablePolicy() {
|
2008-06-02 15:12:28 -04:00
|
|
|
return transferablePolicy;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
public ChecksumTableExportHandler getExportHandler() {
|
|
|
|
return exportHandler;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public ChecksumComputationService getChecksumComputationService() {
|
|
|
|
return checksumComputationService;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public DefaultTransferHandler getTransferHandler() {
|
|
|
|
return (DefaultTransferHandler) super.getTransferHandler();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
@Override
|
|
|
|
protected TableModel createDefaultDataModel() {
|
2008-03-23 18:41:25 -04:00
|
|
|
return new ChecksumTableModel();
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
@Override
|
|
|
|
public ChecksumTableModel getModel() {
|
|
|
|
return (ChecksumTableModel) super.getModel();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
@Override
|
|
|
|
public void createDefaultColumnsFromModel() {
|
|
|
|
super.createDefaultColumnsFromModel();
|
|
|
|
|
|
|
|
for (int i = 0; i < getColumnCount(); i++) {
|
|
|
|
TableColumn column = getColumnModel().getColumn(i);
|
|
|
|
if (i == 0) {
|
|
|
|
column.setPreferredWidth(45);
|
|
|
|
} else if (i == 1) {
|
|
|
|
column.setPreferredWidth(400);
|
|
|
|
} else if (i >= 2) {
|
|
|
|
column.setPreferredWidth(150);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void clear() {
|
2008-07-30 18:37:01 -04:00
|
|
|
checksumComputationService.reset();
|
2008-06-02 15:12:28 -04:00
|
|
|
transferablePolicy.reset();
|
2008-03-15 21:05:06 -04:00
|
|
|
|
2008-07-30 18:37:01 -04:00
|
|
|
getModel().clear();
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public void removeRows(int... rowIndices) {
|
2008-07-30 18:37:01 -04:00
|
|
|
getModel().removeRows(rowIndices);
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2008-03-24 05:44:23 -04:00
|
|
|
@Override
|
|
|
|
public void tableChanged(TableModelEvent e) {
|
2008-09-14 09:19:21 -04:00
|
|
|
// only request repaint when progress changes. Selection will go haywire if you don't.
|
2008-03-24 05:44:23 -04:00
|
|
|
if (e.getType() == ChecksumTableModelEvent.CHECKSUM_PROGRESS) {
|
|
|
|
repaint();
|
2008-09-14 09:19:21 -04:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (e.getType() == TableModelEvent.DELETE) {
|
|
|
|
// remove cancelled tasks from queue
|
|
|
|
checksumComputationService.purge();
|
|
|
|
}
|
|
|
|
|
|
|
|
super.tableChanged(e);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* When trying to drag a row of a multi-select JTable, it will start selecting rows instead
|
|
|
|
* of initiating a drag. This TableUI will give the JTable proper dnd behaviour.
|
|
|
|
*/
|
|
|
|
private class DragDropRowTableUI extends BasicTableUI {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected MouseInputListener createMouseInputListener() {
|
|
|
|
return new DragDropRowMouseInputHandler();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private class DragDropRowMouseInputHandler extends MouseInputHandler {
|
2007-12-23 14:28:04 -05:00
|
|
|
|
2008-09-14 09:19:21 -04:00
|
|
|
@Override
|
|
|
|
public void mouseDragged(MouseEvent e) {
|
|
|
|
// Only do special handling if we are drag enabled with multiple selection
|
|
|
|
if (table.getDragEnabled() && table.getSelectionModel().getSelectionMode() == ListSelectionModel.MULTIPLE_INTERVAL_SELECTION) {
|
|
|
|
table.getTransferHandler().exportAsDrag(table, e, DnDConstants.ACTION_COPY);
|
|
|
|
} else {
|
|
|
|
super.mouseDragged(e);
|
|
|
|
}
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2008-09-14 09:19:21 -04:00
|
|
|
|
2007-12-23 14:28:04 -05:00
|
|
|
}
|