package gov.nasa.worldwind.examples;
import gov.nasa.worldwind.WorldWindow;
import gov.nasa.worldwind.util.PerformanceStatistic;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.util.Arrays;
public class StatisticsPanel extends JPanel
{
private JPanel statsPanel;
private JPanel outerPanel;
private JScrollPane scrollPane;
public StatisticsPanel(WorldWindow wwd)
{
// Make a panel at a default size.
super(new BorderLayout());
this.makePanel(new Dimension(200, 400));
}
public StatisticsPanel(WorldWindow wwd, Dimension size)
{
// Make a panel at a specified size.
super(new BorderLayout());
this.makePanel(size);
wwd.setPerFrameStatisticsKeys(PerformanceStatistic.ALL_STATISTICS_SET);
}
private void makePanel(Dimension size)
{
// Make and fill the panel holding the statistics.
this.statsPanel = new JPanel(new GridLayout(0, 1, 0, 15));
this.statsPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
// Must put the grid in a container to prevent scroll panel from stretching their vertical spacing.
JPanel dummyPanel = new JPanel(new BorderLayout());
dummyPanel.add(this.statsPanel, BorderLayout.NORTH);
// Put the name panel in a scroll bar.
this.scrollPane = new JScrollPane(dummyPanel);
this.scrollPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
if (size != null)
this.scrollPane.setPreferredSize(size);
// Add the scroll bar and stats panel to a titled panel that will resize with the main window.
outerPanel = new JPanel(new GridLayout(0, 1, 0, 10));
outerPanel
.setBorder(new CompoundBorder(BorderFactory.createEmptyBorder(9, 9, 9, 9), new TitledBorder("Statistics")));
outerPanel.setToolTipText("Runtime Statistics");
outerPanel.add(scrollPane);
this.add(outerPanel, BorderLayout.CENTER);
}
private void fill(WorldWindow wwd)
{
// Fill the layers panel with the titles of all layers in the world window's current model.
if (wwd.getSceneController().getPerFrameStatistics().size() < 1)
return;
PerformanceStatistic[] pfs = new PerformanceStatistic[wwd.getPerFrameStatistics().size()];
pfs = wwd.getSceneController().getPerFrameStatistics().toArray(pfs);
Arrays.sort(pfs);
for (PerformanceStatistic stat : pfs)
{
JLabel jcb = new JLabel(stat.toString());
this.statsPanel.add(jcb);
}
}
public void update(WorldWindow wwd)
{
// Replace all the statistics in the panel with the current ones.
this.statsPanel.removeAll();
this.fill(wwd);
this.outerPanel.revalidate();
this.outerPanel.repaint();
}
@Override
public void setToolTipText(String string)
{
this.scrollPane.setToolTipText(string);
}
}