package org.objectstyle.wolips.componenteditor.inspector;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.objectstyle.wolips.bindings.api.IApiBinding;
import org.objectstyle.wolips.wodclipse.core.refactoring.RefactoringWodElement;
public class BindingsInspectorDropHandler extends AbstractBindingsDropHandler<BindingsInspector, TableItem, Object, Table> {
private BindingsInspector _inspector;
public BindingsInspectorDropHandler(BindingsInspector inspector) {
super(inspector.getBindingsTableViewer().getTable());
_inspector = inspector;
}
@Override
protected Object _addHoverAnnotation(TableItem selectedItem) {
return selectedItem;
}
@Override
protected void _removeHoverAnnotation(Object annotation) {
// DO NOTHING
}
@Override
protected IAutoscroller createAutoscroller(Table editorControl) {
return new NoOpAutoscroller();
}
@Override
protected boolean dropFromColumnAtPoint(WOBrowserColumn column, Point dropPoint, BindingsDragHandler dragHandler) throws Exception {
boolean dropFinished = true;
try {
Point controlDropPoint = getEditorControl().toControl(dropPoint);
TableItem selectedItem = getSelectedItemAtPoint(_inspector, controlDropPoint);
if (selectedItem != null) {
IApiBinding binding = getBindingForItem(selectedItem);
if (binding != null) {
String droppedKeyPath = column.getSelectedKeyPath();
RefactoringWodElement element = _inspector.getRefactoringElement();
if (element != null) {
try {
element.setValueForBinding(droppedKeyPath, binding.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
} finally {
removeHoverAnnotation();
}
return dropFinished;
}
@Override
protected BindingsInspector getSelectedContainerAtPoint(Point point, boolean forDrop) throws Exception {
return _inspector;
}
@Override
protected TableItem getSelectedItemAtPoint(BindingsInspector container, Point point) {
TableViewer tableViewer = container.getBindingsTableViewer();
Table table = tableViewer.getTable();
TableItem item = table.getItem(point);
return item;
}
@Override
protected Rectangle getSelectionRectangle(TableItem item) {
TableViewer tableViewer = _inspector.getBindingsTableViewer();
Table table = tableViewer.getTable();
Rectangle rowBounds = item.getBounds();
Rectangle bounds = new Rectangle(5, rowBounds.y, table.getBounds().width - 25, rowBounds.height);
return bounds;
}
@Override
protected boolean isSelectedItemChanged(TableItem oldItem, TableItem newItem) {
return oldItem == null || newItem == null || !getBindingForItem(oldItem).getName().equals(getBindingForItem(newItem).getName());
}
protected IApiBinding getBindingForItem(TableItem item) {
IApiBinding binding;
if (item == null) {
binding = null;
} else {
TableViewer tableViewer = _inspector.getBindingsTableViewer();
Table table = tableViewer.getTable();
int index = table.indexOf(item);
if (index == -1) {
binding = null;
} else {
binding = (IApiBinding) tableViewer.getElementAt(index);
}
}
return binding;
}
}