Package com.eviware.soapui.support.swing

Source Code of com.eviware.soapui.support.swing.AutoscrollSupport

/*
*  soapUI, copyright (C) 2004-2011 eviware.com
*
*  soapUI is free software; you can redistribute it and/or modify it under the
*  terms of version 2.1 of the GNU Lesser General Public License as published by
*  the Free Software Foundation.
*
*  soapUI 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 Lesser General Public License for more details at gnu.org.
*/

package com.eviware.soapui.support.swing;

import java.awt.Component;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.dnd.Autoscroll;

import javax.swing.JViewport;
import javax.swing.SwingUtilities;

public class AutoscrollSupport implements Autoscroll
{
  private static final int AUTOSCROLL_MARGIN = 12;

  Component comp;
  Insets insets;
  Insets scrollUnits;

  public AutoscrollSupport( Component comp, Insets insets )
  {
    this( comp, insets, insets );
  }

  public AutoscrollSupport( Component comp, Insets insets, Insets scrollUnits )
  {
    this.comp = comp;
    this.insets = insets;
    this.scrollUnits = scrollUnits;
  }

  public AutoscrollSupport( Component comp )
  {
    this( comp, new Insets( AUTOSCROLL_MARGIN, AUTOSCROLL_MARGIN, AUTOSCROLL_MARGIN, AUTOSCROLL_MARGIN ) );
  }

  public void autoscroll( Point cursorLoc )
  {
    JViewport viewport = getViewport();
    if( viewport == null )
      return;
    Point viewPos = viewport.getViewPosition();
    int viewHeight = viewport.getExtentSize().height;
    int viewWidth = viewport.getExtentSize().width;

    // resolve scrolling
    if( ( cursorLoc.y - viewPos.y ) < insets.top )
    { // scroll up
      viewport.setViewPosition( new Point( viewPos.x, Math.max( viewPos.y - scrollUnits.top, 0 ) ) );
    }
    else if( ( viewPos.y + viewHeight - cursorLoc.y ) < insets.bottom )
    { // scroll down
      viewport.setViewPosition( new Point( viewPos.x, Math.min( viewPos.y + scrollUnits.bottom, comp.getHeight()
          - viewHeight ) ) );
    }
    else if( ( cursorLoc.x - viewPos.x ) < insets.left )
    { // scroll left
      viewport.setViewPosition( new Point( Math.max( viewPos.x - scrollUnits.left, 0 ), viewPos.y ) );
    }
    else if( ( viewPos.x + viewWidth - cursorLoc.x ) < insets.right )
    { // scroll right
      viewport.setViewPosition( new Point( Math.min( viewPos.x + scrollUnits.right, comp.getWidth() - viewWidth ),
          viewPos.y ) );
    }
  }

  public Insets getAutoscrollInsets()
  {
    Rectangle raOuter = comp.getBounds();
    Rectangle raInner = comp.getParent().getBounds();
    return new Insets( raInner.y - raOuter.y + AUTOSCROLL_MARGIN, raInner.x - raOuter.x + comp.getWidth(),
        raOuter.height - raInner.height - raInner.y + raOuter.y + AUTOSCROLL_MARGIN, raOuter.width - raInner.width
            - raInner.x + raOuter.x + AUTOSCROLL_MARGIN );
  }

  JViewport getViewport()
  {
    return ( JViewport )SwingUtilities.getAncestorOfClass( JViewport.class, comp );
  }
}
TOP

Related Classes of com.eviware.soapui.support.swing.AutoscrollSupport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.