blob: 344a28c3b030e98ea07dafd70cf5158807d3341d [file] [log] [blame]
package org.jetbrains.android.uipreview;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.util.ProgressIndicatorBase;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author Eugene.Kudelevsky
*/
class AndroidPreviewProgressIndicator extends ProgressIndicatorBase {
private final Object myLock = new Object();
private final int myDelay;
private @NotNull final AndroidLayoutPreviewToolWindowForm myForm;
AndroidPreviewProgressIndicator(@NotNull AndroidLayoutPreviewToolWindowForm form, int delay) {
myDelay = delay;
myForm = form;
}
@Override
public void start() {
super.start();
UIUtil.invokeLaterIfNeeded(new Runnable() {
@Override
public void run() {
final Timer timer = UIUtil.createNamedTimer("Android rendering progress timer", myDelay, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
synchronized (myLock) {
if (isRunning()) {
myForm.getPreviewPanel().registerIndicator(AndroidPreviewProgressIndicator.this);
}
}
}
});
timer.setRepeats(false);
timer.start();
}
});
}
@Override
public void stop() {
synchronized (myLock) {
super.stop();
ApplicationManager.getApplication().invokeLater(new Runnable() {
@Override
public void run() {
myForm.getPreviewPanel().unregisterIndicator(AndroidPreviewProgressIndicator.this);
}
});
}
}
}