package org.multibit.viewsystem.swing;
import java.util.TimerTask;
import javax.swing.SwingUtilities;
import org.multibit.viewsystem.DisplayHint;
/**
* Condense the many fire data change events into something more manageable for a UI to refresh.
* @author jim
*
*/
public class FireDataChangedTimerTask extends TimerTask {
private MultiBitFrame mainFrame;
private boolean fireDataChanged = false;
private boolean isCurrentlyUpdating = false;
public FireDataChangedTimerTask(MultiBitFrame mainFrame) {
this.mainFrame = mainFrame;
}
@Override
public void run() {
// If still updating from the last time, skip this firing.
// Timer thread.
if (!isCurrentlyUpdating) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
boolean fireDataChangedThisTime = false;
if (fireDataChanged) {
fireDataChanged = false;
fireDataChangedThisTime = true;
}
if (fireDataChangedThisTime) {
// Swing thread.
isCurrentlyUpdating = true;
try {
mainFrame.fireDataChangedUpdateNow(DisplayHint.WALLET_TRANSACTIONS_HAVE_CHANGED);
} finally {
// Swing thread.
isCurrentlyUpdating = false;
}
}
}
});
}
}
public boolean isFireDataChanged() {
return fireDataChanged;
}
public void setFireDataChanged (boolean fireDataChanged) {
this.fireDataChanged = fireDataChanged;
}
}