// License: GPL. For details, see LICENSE file.
package at.dallermassl.josm.plugin.surveyor.action.gui;
import java.awt.Component;
import java.awt.Container;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JDialog;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import org.openstreetmap.josm.Main;
/**
* @author cdaller
*
*/
public class DialogClosingThread extends Thread implements KeyListener, DocumentListener {
public static final long DEFAULT_TIMEOUT = 5000;
private JDialog dialog;
private long timeout;
private long loopCount;
/**
* Using the given dialog and the default timeout.
*/
public DialogClosingThread(JDialog dialog) {
this(dialog, DEFAULT_TIMEOUT);
}
public DialogClosingThread(JDialog dialog, long timeout) {
super();
this.dialog = dialog;
this.timeout = timeout;
this.loopCount = timeout / 1000;
}
@Override
public void run() {
String title = dialog.getTitle();
while (loopCount > 0) {
dialog.setTitle(title + " (" + loopCount + "sec)");
--loopCount;
try {
sleep(1000);
} catch (InterruptedException ignore) {
Main.debug(ignore);
}
}
dialog.setVisible(false);
dialog.dispose();
}
public void reset() {
this.loopCount = timeout / 1000;
}
@Override
public void keyPressed(KeyEvent e) {
reset();
Main.debug("keypressed: " + e.getKeyCode());
}
@Override
public void keyReleased(KeyEvent e) {
reset();
Main.debug("keyreleased: " + e.getKeyCode());
}
@Override
public void keyTyped(KeyEvent e) {
reset();
Main.debug("keytyped: " + e.getKeyCode());
}
public void observe(Container container) {
for (Component component : container.getComponents()) {
if (component instanceof JTextField) {
observe((JTextField) component);
} else {
observe(component);
}
}
}
public void observe(Component component) {
component.addKeyListener(this);
}
public void observe(JTextField textfield) {
textfield.getDocument().addDocumentListener(this);
}
@Override
public void changedUpdate(DocumentEvent e) {
reset();
Main.debug("changedUpdate: " + e);
}
@Override
public void insertUpdate(DocumentEvent e) {
reset();
Main.debug("insertUpdate: " + e);
}
@Override
public void removeUpdate(DocumentEvent e) {
reset();
Main.debug("removeUpdate: " + e);
}
}