import ij.IJ;
import ij.ImagePlus;
import ij.gui.ImageCanvas;
import ij.gui.Roi;
import ij.gui.StackWindow;
import ij.plugin.PlugIn;
import java.awt.Scrollbar;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;

public class ROI_3D implements PlugIn {
	public void run(String arg) {
		ImagePlus image = IJ.getImage();
		ImageCanvas canvas = image.getCanvas();
		image.setWindow(new StackWindowWith3dRoi(image, canvas));
	}

	static class StackWindowWith3dRoi extends StackWindow {
		StackWindowWith3dRoi(ImagePlus image, ImageCanvas canvas) {
			super(image, canvas);
			int i = image.getCurrentSlice();
			sliceSelector.addAdjustmentListener(new Listener(i));
		}

		class Listener implements AdjustmentListener {
			Roi[] rois;
			int oldSlice;

			Listener(int currentSlice) {
				rois = new Roi[imp.getStack().getSize() + 1];
				oldSlice = currentSlice;
			}

			public void adjustmentValueChanged(AdjustmentEvent e) {
				rois[oldSlice] = imp.getRoi();
				oldSlice = e.getValue();
				if (rois[oldSlice] == null)
					imp.killRoi();
				else
					imp.setRoi(rois[oldSlice]);
			}
		}
	}
}