|
LineWidthAdjuster |
|
package ij.plugin.frame;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import ij.*;
import ij.plugin.*;
import ij.process.*;
import ij.gui.*;
import ij.measure.*;
import ij.plugin.frame.Recorder;
import ij.util.Tools;
/** Adjusts the width of line selections. */
public class LineWidthAdjuster extends PlugInFrame implements PlugIn,
Runnable, AdjustmentListener, TextListener {
int sliderRange = 100;
Scrollbar slider;
int value;
boolean setText;
static Frame instance;
Thread thread;
boolean done;
TextField tf;
public LineWidthAdjuster() {
super("Line Width");
if (instance!=null) {
instance.toFront();
return;
}
WindowManager.addWindow(this);
instance = this;
slider = new Scrollbar(Scrollbar.HORIZONTAL, 1, 1, 1, sliderRange+1);
Panel panel = new Panel();
GridBagLayout grid = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
panel.setLayout(grid);
c.gridx = 0; c.gridy = 0;
c.gridwidth = 1;
c.ipadx = 75;
c.insets = new Insets(5, 15, 5, 5);
c.anchor = GridBagConstraints.WEST;
grid.setConstraints(slider, c);
panel.add(slider);
c.ipadx = 0; // reset
c.gridx = 1;
c.insets = new Insets(5, 5, 5, 15);
c.anchor = GridBagConstraints.EAST;
tf = new TextField(""+Line.getWidth(), 3);
tf.addTextListener(this);
grid.setConstraints(tf, c);
panel.add(tf);
add(panel, BorderLayout.CENTER);
slider.addAdjustmentListener(this);
slider.setUnitIncrement(1);
pack();
setResizable(false);
GUI.center(this);
show();
thread = new Thread(this, "LineWidthAdjuster");
thread.start();
setup();
}
public synchronized void adjustmentValueChanged(AdjustmentEvent e) {
value = slider.getValue();
setText = true;
notify();
}
public synchronized void textValueChanged(TextEvent e) {
int width = (int)Tools.parseDouble(tf.getText(), -1);
//IJ.log(""+width);
if (width==-1) return;
if (width<0) width=1;
if (width!=Line.getWidth()) {
slider.setValue(width);
value = width;
notify();
}
}
void setup() {
}
// Separate thread that does the potentially time-consuming processing
public void run() {
while (!done) {
synchronized(this) {
try {wait();}
catch(InterruptedException e) {}
if (done) return;
Line.setWidth(value);
if (setText) tf.setText(""+value);
setText = false;
ImagePlus imp = WindowManager.getCurrentImage();
if (imp!=null) {
Roi roi = imp.getRoi();
if (roi!=null) imp.draw();
}
}
}
}
public void windowClosing(WindowEvent e) {
close();
}
/** Overrides close() in PlugInFrame. */
public void close() {
super.close();
instance = null;
done = true;
synchronized(this) {notify();}
}
public void windowActivated(WindowEvent e) {
super.windowActivated(e);
}
}
|
LineWidthAdjuster |
|