package nodebox.client;
import nodebox.ui.AddressBar;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
/**
* The ProgressPanel shows the render state of the network.
*/
public class ProgressPanel extends JComponent {
public static final Image backgroundImage;
public static final Icon stopOnIcon, stopOffIcon;
private static final int PROGRESS_PANEL_HEIGHT = AddressBar.ADDRESS_BAR_HEIGHT;
private static final int PROGRESS_PANEL_WIDTH = 45;
static {
try {
backgroundImage = ImageIO.read(ProgressPanel.class.getResourceAsStream("/progress-background.png"));
stopOnIcon = new ImageIcon(ProgressPanel.class.getResource("/progress-stop-on.png"));
stopOffIcon = new ImageIcon(ProgressPanel.class.getResource("/progress-stop-off.png"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private final JButton stopButton;
public ProgressPanel(final NodeBoxDocument document) {
setMinimumSize(new Dimension(0, PROGRESS_PANEL_HEIGHT));
setMaximumSize(new Dimension(PROGRESS_PANEL_WIDTH, PROGRESS_PANEL_HEIGHT));
setPreferredSize(new Dimension(PROGRESS_PANEL_WIDTH, PROGRESS_PANEL_HEIGHT));
setLayout(new FlowLayout(FlowLayout.LEADING, 0, 0));
stopButton = new JButton(stopOffIcon);
stopButton.setBorderPainted(false);
stopButton.setBorder(null);
stopButton.setSize(19, 19);
stopButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
document.stopRendering();
}
});
add(stopButton);
}
@Override
protected void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, getWidth(), PROGRESS_PANEL_HEIGHT, null);
}
public void setInProgress(boolean visible) {
if (visible) {
stopButton.setIcon(stopOnIcon);
} else {
stopButton.setIcon(stopOffIcon);
}
}
}