package org.jbpm.gd.jpdl.util;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
public class VariableTableCellClickedResolver implements MouseListener {
private Table table;
private VariableTableItemWrapper selectedWrapper;
public VariableTableCellClickedResolver(Table table){
this.table = table;
}
public void mouseDoubleClick(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
TableItem item = getSelectedTableItem();
if (item == null) return;
if (selectedWrapper != null) {
selectedWrapper.cancelEditing();
selectedWrapper = null;
}
int column = getSelectedColumn(e.x, e.y);
if (column == -1) return;
if (column == 1 || column == 2) {
selectedWrapper = (VariableTableItemWrapper)item.getData();
selectedWrapper.editCell(column);
}
}
public void mouseUp(MouseEvent e) {
}
private TableItem getSelectedTableItem() {
TableItem[] selection = table.getSelection();
if (selection.length > 0) {
return selection[0];
} else {
return null;
}
}
private int getSelectedColumn(int x, int y) {
int columnToEdit = -1;
int columns = table.getColumnCount();
TableItem tableItem = getSelectedTableItem();
if (tableItem == null) return -1;
for (int i = 0; i < columns; i++) {
Rectangle bounds = getBounds(tableItem, i);
if (bounds.contains(x, y)) {
columnToEdit = i;
break;
}
}
return columnToEdit;
}
private Rectangle getBounds(TableItem item, int columnIndex) {
return item.getBounds(columnIndex);
}
}