use of org.talend.designer.dbmap.ui.event.MousePositionAnalyser in project tdi-studio-se by Talend.
the class DataMapTableView method addManualTableResizeListeners.
/**
* DOC amaumont Comment method "addManualTableResizeListeners".
*
* @param uiManager
*/
private void addManualTableResizeListeners(final UIManager uiManager) {
this.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (currentCursor != null) {
currentCursor.dispose();
}
}
});
Listener tableResizerListener = new Listener() {
@Override
public void handleEvent(Event event) {
MousePositionAnalyser mpa = new MousePositionAnalyser(DataMapTableView.this);
Point eventPoint = new Point(event.x, event.y);
boolean leftMouseButton = (event.stateMask & SWT.BUTTON1) != 0 || event.button == 1;
switch(event.type) {
case SWT.MouseMove:
if (resizeHelper.isDragging()) {
Point newPoint = convertToParentOrigin(DataMapTableView.this, eventPoint);
Point dragPoint = resizeHelper.getLastDragPoint();
Point diff = new Point(newPoint.x - dragPoint.x, newPoint.y - dragPoint.y);
if (mpa.isOnLeftBorder(eventPoint)) {
diff.x *= -1;
}
Rectangle rect = DataMapTableView.this.getClientArea();
rect.width += 2 * DataMapTableView.this.getBorderWidth();
rect.height += 2 * DataMapTableView.this.getBorderWidth();
RESIZE_MODE currentMode = resizeHelper.getCurrentMode();
int newWidth = (currentMode == RESIZE_MODE.HORIZONTAL || currentMode == RESIZE_MODE.BOTH) ? rect.width + diff.x * 2 : rect.width;
int newHeight = (currentMode == RESIZE_MODE.VERTICAL || currentMode == RESIZE_MODE.BOTH) ? rect.height + diff.y : rect.height;
if (newHeight < MINIMUM_HEIGHT + OFFSET_HEIGHT_TRIGGER && diff.y < 0) {
changeMinimizeState(true);
newHeight = MINIMUM_HEIGHT;
} else if (newHeight > MINIMUM_HEIGHT + OFFSET_HEIGHT_TRIGGER && diff.y > 0) {
changeMinimizeState(false);
}
changeSize(new Point(newWidth, newHeight), false, true);
resizeHelper.setLastDragPoint(newPoint);
} else if (!resizeHelper.isDragging()) {
Cursor cursor = null;
if (mpa.isOnLeftBottomCorner(eventPoint)) {
// cursor = new Cursor(dataMapTableView.getDisplay(), org.eclipse.swt.SWT.CURSOR_SIZESW);
// resizeHelper.setCurrentMode(RESIZE_MODE.BOTH);
} else if (mpa.isOnRightBottomCorner(eventPoint)) {
// cursor = new Cursor(dataMapTableView.getDisplay(), org.eclipse.swt.SWT.CURSOR_SIZESE);
// resizeHelper.setCurrentMode(RESIZE_MODE.BOTH);
} else if (mpa.isOnLeftBorder(eventPoint)) {
// cursor = new Cursor(dataMapTableView.getDisplay(), org.eclipse.swt.SWT.CURSOR_SIZEE);
// resizeHelper.setCurrentMode(RESIZE_MODE.HORIZONTAL);
} else if (mpa.isOnRightBorder(eventPoint)) {
// cursor = new Cursor(dataMapTableView.getDisplay(), org.eclipse.swt.SWT.CURSOR_SIZEW);
// resizeHelper.setCurrentMode(RESIZE_MODE.HORIZONTAL);
} else if (mpa.isOnBottomBorder(eventPoint)) {
cursor = new Cursor(DataMapTableView.this.getDisplay(), org.eclipse.swt.SWT.CURSOR_SIZES);
resizeHelper.setCurrentMode(RESIZE_MODE.VERTICAL);
}
if (cursor != null) {
DataMapTableView.this.setCursor(cursor);
} else {
setDefaultCursor();
resizeHelper.setCurrentMode(RESIZE_MODE.NONE);
}
}
break;
case SWT.MouseDown:
if (leftMouseButton) {
if (mpa.isOnLeftBorder(eventPoint) || mpa.isOnRightBorder(eventPoint) || mpa.isOnBottomBorder(eventPoint)) {
resizeHelper.startDrag(convertToParentOrigin(DataMapTableView.this, new Point(event.x, event.y)));
} else {
setDefaultCursor();
}
parentLayout = DataMapTableView.this.getParent().getLayout();
DataMapTableView.this.getParent().setLayout(null);
}
break;
case SWT.MouseUp:
if (leftMouseButton) {
resizeHelper.stopDrag();
// gridData = (GridData) dataMapTableView.getLayoutData();
// gridData.exclude = false;
DataMapTableView.this.getParent().setLayout(parentLayout);
DataMapTableView.this.getParent().layout();
uiManager.resizeTablesZoneViewAtComputedSize(getZone());
uiManager.refreshBackground(true, false);
}
break;
case SWT.MouseExit:
setDefaultCursor();
break;
default:
}
}
};
this.addListener(SWT.MouseMove, tableResizerListener);
this.addListener(SWT.MouseDown, tableResizerListener);
this.addListener(SWT.MouseUp, tableResizerListener);
}
Aggregations