Class PieceMover.AbstractDragHandler

java.lang.Object
VASSAL.build.module.map.PieceMover.AbstractDragHandler
All Implemented Interfaces:
DragGestureListener, DragSourceListener, DragSourceMotionListener, DropTargetListener, EventListener
Direct Known Subclasses:
PieceMover.DragHandler, PieceMover.DragHandlerNoImage
Enclosing class:
PieceMover

public abstract static class PieceMover.AbstractDragHandler extends Object implements DragGestureListener, DragSourceListener, DragSourceMotionListener, DropTargetListener
Common functionality for DragHandler for cases with and without drag image support.
Author:
Pieter Geerkens
  • Field Details

    • pieceMovers

      protected static List<PieceMover> pieceMovers
    • CURSOR_ALPHA

      protected static final int CURSOR_ALPHA
      See Also:
    • EXTRA_BORDER

      protected static final int EXTRA_BORDER
      See Also:
    • boundingBox

      protected Rectangle boundingBox
    • boundingBoxComp

      protected Rectangle boundingBoxComp
    • dragPieceOffCenterZoom

      protected double dragPieceOffCenterZoom
    • currentPieceOffsetX

      protected int currentPieceOffsetX
    • currentPieceOffsetY

      protected int currentPieceOffsetY
    • dropTargetListeners

      protected Map<Component,DropTargetListener> dropTargetListeners
    • lastDragLocation

      protected Point lastDragLocation
    • dragCursor

      protected JLabel dragCursor
    • dragCursorZoom

      protected double dragCursorZoom
  • Constructor Details

    • AbstractDragHandler

      public AbstractDragHandler()
  • Method Details

    • getTheDragHandler

      public static PieceMover.AbstractDragHandler getTheDragHandler()
      returns the singleton DragHandler instance
    • setTheDragHandler

      public static void setTheDragHandler(PieceMover.AbstractDragHandler myHandler)
    • resetRecursivePieceSlots

      public static void resetRecursivePieceSlots(AbstractBuildable target)
      Finds all the piece slots in a module and resets their drop targets to use a new DragHandler
      Parameters:
      target - recursive search through components
    • resetDragHandler

      public static void resetDragHandler()
      Reset our drag handler, e.g. if our preferences change.
    • addPieceMover

      public static void addPieceMover(PieceMover pm)
      Registers a PieceMover
      Parameters:
      pm - PieceMover for this dragHandler
    • makeDropTarget

      public static DropTarget makeDropTarget(Component theComponent, int dndContants, DropTargetListener dropTargetListener)
      Creates a new DropTarget and hooks us into the beginning of a DropTargetListener chain. DropTarget events are not multicast; there can be only one "true" listener.
    • removeDropTarget

      public static void removeDropTarget(Component theComponent)
      Removes a dropTarget component
      Parameters:
      theComponent - component to remove
    • getOffsetMult

      protected abstract int getOffsetMult()
      Returns:
      platform-dependent offset multiplier
    • getDeviceScale

      protected abstract double getDeviceScale(DragGestureEvent dge)
      Parameters:
      dge - DG event
      Returns:
      platform-dependent device scale
    • getDeviceScale

      protected abstract double getDeviceScale(DropTargetDragEvent e)
    • getListener

      protected DropTargetListener getListener(DropTargetEvent e)
      Parameters:
      e - DropTargetEvent
      Returns:
      associated DropTargetListener
    • moveDragCursor

      @Deprecated(since="2023-05-08", forRemoval=true) protected void moveDragCursor(int dragX, int dragY)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Moves the drag cursor on the current draw window
      Parameters:
      dragX - x position
      dragY - y position
    • removeDragCursor

      @Deprecated(since="2023-05-08", forRemoval=true) protected void removeDragCursor()
      Deprecated, for removal: This API element is subject to removal in a future version.
      Removes the drag cursor from the current draw window
    • calcDrawOffset

      protected void calcDrawOffset()
      calculates the offset between cursor dragCursor positions
    • setDrawWinToOwnerOf

      @Deprecated(since="2023-05-08", forRemoval=true) public void setDrawWinToOwnerOf(Component newDropWin)
      Deprecated, for removal: This API element is subject to removal in a future version.
      creates or moves cursor object to given window. Called when drag operation begins in a window or the cursor is dragged over a new drop-target window
      Parameters:
      newDropWin - window component to be our new draw window.
    • makeDragImageCursorCommon

      @Deprecated(since="2023-05-08", forRemoval=true) protected BufferedImage makeDragImageCursorCommon(double zoom, boolean doOffset, Component target, boolean setSize)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Common functionality abstracted from makeDragImage and makeDragCursor
      Parameters:
      zoom - Zoom Level
      doOffset - Drag Offset
      target - Target Component
      setSize - Set Size
      Returns:
      Drag Image
    • makeDragImageCursorCommon

      protected BufferedImage makeDragImageCursorCommon(double mapzoom, double os_scale, boolean doOffset, Component target)
    • makeDragCursor

      @Deprecated(since="2023-05-08", forRemoval=true) protected void makeDragCursor(double zoom)
      Deprecated, for removal: This API element is subject to removal in a future version.
    • dragGestureRecognized

      public void dragGestureRecognized(DragGestureEvent dge)
      DRAG GESTURE LISTENER INTERFACE EVENT uses SCALED, DRAG-SOURCE coordinate system. ("component coordinates") PIECE uses SCALED, OWNER (arbitrary) coordinate system ("map coordinates") Fires after user begins moving the mouse several pixels over a map. This method will be overridden, but called as a super(), by the Drag Gesture extension that is used, which will either be PieceMover.DragHandler if DragImage is supported by the JRE, or PieceMover.DragHandlerNoImage if not. Either one will have called dragGestureRecognizedPrep(java.awt.dnd.DragGestureEvent), immediately below, before it calls this method.
      Specified by:
      dragGestureRecognized in interface DragGestureListener
    • dragGestureRecognizedPrep

      protected Point dragGestureRecognizedPrep(DragGestureEvent dge)
      Sets things up at the beginning of a drag-and-drop operation:
      - Screen out any immovable pieces
      - Account for any offsets on in the window
      - Sets dragWin to our source window
      Parameters:
      dge - dg event
      Returns:
      mousePosition if we processed, or null if we bailed.
    • beginDragging

      protected void beginDragging(DragGestureEvent dge)
      The the Drag Gesture Recognizer that we're officially beginning a drag.
      Parameters:
      dge - DG event
    • dragDropEnd

      public void dragDropEnd(DragSourceDropEvent e)
      DRAG SOURCE LISTENER INTERFACE
      Specified by:
      dragDropEnd in interface DragSourceListener
      Parameters:
      e - DragSourceDropEvent
    • dragEnter

      public void dragEnter(DragSourceDragEvent e)
      Specified by:
      dragEnter in interface DragSourceListener
    • dragExit

      public void dragExit(DragSourceEvent e)
      Specified by:
      dragExit in interface DragSourceListener
    • dragOver

      public void dragOver(DragSourceDragEvent e)
      Specified by:
      dragOver in interface DragSourceListener
    • dropActionChanged

      public void dropActionChanged(DragSourceDragEvent e)
      Specified by:
      dropActionChanged in interface DragSourceListener
    • dragMouseMoved

      public void dragMouseMoved(DragSourceDragEvent dsde)
      DRAG SOURCE MOTION LISTENER INTERFACE EVENT uses UNSCALED, SCREEN coordinate system Moves cursor after mouse. Used to check for real mouse movement. Warning: dragMouseMoved fires 8 times for each point on development system (Win2k)
      Specified by:
      dragMouseMoved in interface DragSourceMotionListener
    • dragEnter

      public void dragEnter(DropTargetDragEvent e)
      DROP TARGET INTERFACE EVENT uses UNSCALED, DROP-TARGET coordinate system dragEnter - switches current drawWin when mouse enters a new DropTarget
      Specified by:
      dragEnter in interface DropTargetListener
    • drop

      public void drop(DropTargetDropEvent e)
      DROP TARGET INTERFACE EVENT uses UNSCALED, DROP-TARGET coordinate system drop() - Last event of the drop operation. We adjust the drop point for off-center drag, remove the cursor, and pass the event along listener chain.
      Specified by:
      drop in interface DropTargetListener
    • dragExit

      public void dragExit(DropTargetEvent e)
      Passes event along listener chain
      Specified by:
      dragExit in interface DropTargetListener
    • dragOver

      public void dragOver(DropTargetDragEvent e)
      Passes event along listener chain
      Specified by:
      dragOver in interface DropTargetListener
    • dropActionChanged

      public void dropActionChanged(DropTargetDragEvent e)
      Passes event along listener chain
      Specified by:
      dropActionChanged in interface DropTargetListener