/******************************************************************************* * Copyright (c) 2008 xored software, Inc. All rights reserved. This program and the accompanying * materials are made available under the terms of the Eclipse Public License v1.0 which accompanies * this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html Contributors: * xored software, Inc. - initial API and Implementation (Yuri Strot) *******************************************************************************/ package com.xored.glance.internal.ui.panels; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; /** * @author Yuri Strot */ public class MoveTracker implements Listener { private Cursor cursor; private Point iLocation; private Control control; public MoveTracker(Control control) { this.control = control; cursor = new Cursor(control.getDisplay(), SWT.CURSOR_SIZEALL); control.setCursor(cursor); control.addListener(SWT.MouseDown, this); control.addListener(SWT.Dispose, this); } @Override public void handleEvent(Event event) { if (control != null && !control.isDisposed()) { switch (event.type) { case SWT.MouseDown: Point point = control.getDisplay().getCursorLocation(); handleClick(point.x, point.y); break; case SWT.MouseMove: point = control.getDisplay().getCursorLocation(); handleDrag(point.x - iLocation.x, point.y - iLocation.y); break; case SWT.Dispose: cursor.dispose(); cursor = null; case SWT.MouseUp: control.getDisplay().removeFilter(SWT.MouseMove, this); control.getDisplay().removeFilter(SWT.MouseUp, this); } } } protected void handleClick(int x, int y) { iLocation = new Point(x, y); control.getDisplay().addFilter(SWT.MouseMove, this); control.getDisplay().addFilter(SWT.MouseUp, this); } protected void handleDrag(int dx, int dy) { } }