/* * org.openmicroscopy.shoola.util.ui.tdialog.ScreenControl * *------------------------------------------------------------------------------ * Copyright (C) 2006-2014 University of Dundee. All rights reserved. * * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * *------------------------------------------------------------------------------ */ package org.openmicroscopy.shoola.util.ui.tdialog; //Java imports import java.awt.Component; import java.awt.Cursor; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.InputEvent; import java.awt.event.MouseEvent; import javax.swing.SwingUtilities; //Third-party libraries //Application-internal dependencies /** * Control to handle mouse events. * * @author Jean-Marie Burel      * <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a> * @author <br>Andrea Falconi      * <a href="mailto:a.falconi@dundee.ac.uk"> * a.falconi@dundee.ac.uk</a> * @version 2.2 * <small> * (<b>Internal version:</b> $Revision: 4695 $ $Date: 2006-12-15 17:08:05 +0000 (Fri, 15 Dec 2006) $) * </small> * @since OME2.2 */ class ScreenControl { /** * The x-coordinate of mouse in absolute coordinate system * when the mouse is pressed. */ private int xAbs; /** * The y-coordinate of mouse in absolute coordinate system * when the mouse is pressed. */ private int yAbs; /** * The y-coordinate of mouse in source view's coordinate system * when the mouse is pressed. */ private int xView; /** * The y-coordinate of mouse in source view's coordinate system * when the mouse is pressed. */ private int yView; /** Dragging control. */ private boolean dragging; /** The controller. */ private DialogControl controller; /** * Sets the mouse cursor. * * @param c The cursor to set. */ private void setCursor(Cursor c) { controller.getModel().getRootPane().setCursor(c); } /** * Sets the location of the {@link TinyDialog window}. * * @param e The mouse event. */ private void moveFrame(MouseEvent e) { Point p = SwingUtilities.convertPoint((Component) e.getSource(), e.getX(), e.getY(), null); int deltaX = xAbs-p.x; int deltaY = yAbs-p.y; Rectangle r = controller.getModel().getBounds(); int newX = r.x-deltaX; int newY = r.y-deltaY; controller.getModel().setLocation(newX, newY); } /** * Creates a new instance. * @param controller Back pointer to the main Controller. * Mustn't be <code>null</code>. */ ScreenControl(DialogControl controller) { if (controller == null) throw new IllegalArgumentException("No control."); this.controller = controller; dragging = false; } /** * Handles the <code>moussePressed</code> event. * * @param e The event to handle. */ void mousePressed(MouseEvent e) { Point p = SwingUtilities.convertPoint((Component) e.getSource(), e.getX(), e.getY(), null); xView = e.getX(); yView = e.getY(); xAbs = p.x; yAbs = p.y; Insets i = controller.getModel().getInsets(); Point ep = new Point(xView, yView); if (ep.x > i.left && ep.y > i.top && ep.x < controller.getModel().getWidth()-i.right) { dragging = true; setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); return; } } /** * Handles the <code>mouseReleased</code> event. * * @param e The event to handle. */ void mouseReleased(MouseEvent e) { if (!dragging) return; moveFrame(e); setCursor(Cursor.getDefaultCursor()); dragging = false; } /** * Handles the <code>mouseDragged</code> event. * * @param e The event to handle. */ void mouseDragged(MouseEvent e) { if (!dragging) return; //Don't allow moving of frames left mouse button was not used. if (((e.getModifiers() & InputEvent.BUTTON1_MASK) != InputEvent.BUTTON1_MASK)) return; setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); moveFrame(e); } }