package javax.swing;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import javax.swing.border.Border;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.ViewportUI;
public class JViewport extends JComponent
{
private static final long serialVersionUID = -6925142919680527970L;
public static final int SIMPLE_SCROLL_MODE = 0;
public static final int BLIT_SCROLL_MODE = 1;
public static final int BACKINGSTORE_SCROLL_MODE = 2;
ChangeEvent changeEvent = new ChangeEvent(this);
int scrollMode;
protected boolean scrollUnderway;
protected boolean isViewSizeSet;
Dimension extentSize;
Dimension viewSize;
Point lastPaintPosition;
public JViewport()
{
setOpaque(true);
setScrollMode(BLIT_SCROLL_MODE);
updateUI();
}
public Dimension getExtentSize()
{
if (extentSize == null)
return toViewCoordinates(getSize());
else
return extentSize;
}
public Dimension toViewCoordinates(Dimension size)
{
return size;
}
public Point toViewCoordinates(Point p)
{
Point pos = getViewPosition();
return new Point(p.x + pos.x,
p.y + pos.y);
}
public void setExtentSize(Dimension newSize)
{
extentSize = newSize;
fireStateChanged();
}
public Dimension getViewSize()
{
if (isViewSizeSet)
return viewSize;
else
{
Component view = getView();
if (view != null)
return view.getPreferredSize();
else
return new Dimension();
}
}
public void setViewSize(Dimension newSize)
{
viewSize = newSize;
Component view = getView();
if (view != null)
view.setSize(viewSize);
isViewSizeSet = true;
fireStateChanged();
}
public Point getViewPosition()
{
Component view = getView();
if (view == null)
return new Point(0,0);
else
{
Point p = view.getLocation();
p.x = -p.x;
p.y = -p.y;
return p;
}
}
public void setViewPosition(Point p)
{
Component view = getView();
if (view != null)
{
Point q = new Point(-p.x, -p.y);
view.setLocation(q);
fireStateChanged();
}
}
public Rectangle getViewRect()
{
return new Rectangle(getViewPosition(),
getExtentSize());
}
public boolean isBackingStoreEnabled()
{
return scrollMode == BACKINGSTORE_SCROLL_MODE;
}
public void setBackingStoreEnabled(boolean b)
{
if (b && scrollMode != BACKINGSTORE_SCROLL_MODE)
{
scrollMode = BACKINGSTORE_SCROLL_MODE;
fireStateChanged();
}
}
public void setScrollMode(int mode)
{
scrollMode = mode;
fireStateChanged();
}
public int getScrollMode()
{
return scrollMode;
}
public Component getView()
{
if (getComponentCount() == 0)
return null;
return getComponents()[0];
}
public void setView(Component v)
{
while (getComponentCount() > 0)
remove(0);
if (v != null)
{
add(v);
fireStateChanged();
}
}
public void revalidate()
{
fireStateChanged();
super.revalidate();
}
public void reshape(int x, int y, int w, int h)
{
boolean changed =
(x != getX())
|| (y != getY())
|| (w != getWidth())
|| (h != getHeight());
super.reshape(x, y, w, h);
if (changed)
fireStateChanged();
}
protected void addImpl(Component comp, Object constraints, int index)
{
if (getComponentCount() > 0)
remove(getComponents()[0]);
super.addImpl(comp, constraints, index);
}
public final Insets getInsets()
{
return new Insets(0,0,0,0);
}
public final Insets getInsets(Insets insets)
{
if (insets == null)
return getInsets();
insets.top = 0;
insets.bottom = 0;
insets.left = 0;
insets.right = 0;
return insets;
}
public boolean isOptimizedDrawingEnabled()
{
return false;
}
public void paint(Graphics g)
{
paintComponent(g);
}
public void addChangeListener(ChangeListener listener)
{
listenerList.add(ChangeListener.class, listener);
}
public void removeChangeListener(ChangeListener listener)
{
listenerList.remove(ChangeListener.class, listener);
}
public ChangeListener[] getChangeListeners()
{
return (ChangeListener[]) getListeners(ChangeListener.class);
}
protected void fireStateChanged()
{
ChangeListener[] listeners = getChangeListeners();
for (int i = 0; i < listeners.length; ++i)
listeners[i].stateChanged(changeEvent);
}
public String getUIClassID()
{
return "ViewportUI";
}
public void updateUI()
{
setUI((ViewportUI) UIManager.getUI(this));
}
public ViewportUI getUI()
{
return (ViewportUI) ui;
}
public void setUI(ViewportUI ui)
{
super.setUI(ui);
}
public final void setBorder(Border border)
{
if (border != null)
throw new IllegalArgumentException();
}
}