package net.sf.freecol.client.gui;
import java.lang.reflect.InvocationTargetException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
import net.sf.freecol.FreeCol;
import net.sf.freecol.common.model.Map.Direction;
public class ScrollThread extends Thread {
public static final String COPYRIGHT = "Copyright (C) 2003-2012 The FreeCol Team";
public static final String LICENSE = "http://www.gnu.org/licenses/gpl.html";
public static final String REVISION = "$Revision$";
private static final Logger logger = Logger.getLogger(ScrollThread.class.getName());
/**
* Scrolls the view of the Map by moving its focus.
*/
private final MapViewer mapViewer;
private Direction direction;
private boolean cont;
/**
* The constructor to use.
*
* @param mapViewer The GUI that holds information such as screen
* resolution.
*/
public ScrollThread(MapViewer mapViewer) {
super(FreeCol.CLIENT_THREAD + "Mouse scroller");
this.mapViewer = mapViewer;
this.cont = true;
}
/**
* Sets the direction in which this ScrollThread will scroll.
*
* @param d The direction in which this ScrollThread will scroll.
*/
public void setDirection(Direction d) {
direction = d;
}
/**
* Makes this ScrollThread stop doing what it is supposed to do.
*/
public void stopScrolling() {
cont = false;
}
/**
* Performs the actual scrolling.
*/
@Override
public void run() {
do {
try {
sleep(100);
} catch (InterruptedException e) {
}
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
mapViewer.scrollMap(direction);
}
});
} catch (InvocationTargetException e) {
logger.log(Level.WARNING, "Scroll thread caught error", e);
cont = false;
} catch (InterruptedException e) {
logger.log(Level.WARNING, "Scroll thread interrupted", e);
cont = false;
}
} while (cont);
}
}