package org.dllearner.tools.protege; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.JSeparator; import javax.swing.SwingUtilities; import javax.swing.Timer; import org.semanticweb.owlapi.reasoner.ReasonerProgressMonitor; public class StatusBar extends JPanel implements PropertyChangeListener, ReasonerProgressMonitor { /** * */ private static final long serialVersionUID = 1L; private JLabel infoLabel; private JProgressBar progressBar; private boolean cancelled; private boolean indeterminate; private static final int CANCEL_TIMEOUT_MS = 5000; private Timer cancelTimeout; private int progress; private String progressTitle; public StatusBar() { setLayout(new BorderLayout()); infoLabel = new JLabel(""); progressBar = new JProgressBar(); JPanel rightPanel = new JPanel(new BorderLayout()); rightPanel.setOpaque(false); JPanel leftPanel = new JPanel(new FlowLayout()); leftPanel.add(progressBar); leftPanel.add(new JSeparator(JSeparator.VERTICAL)); leftPanel.add(infoLabel); leftPanel.add(new JSeparator(JSeparator.VERTICAL)); leftPanel.setOpaque(false); add(leftPanel, BorderLayout.WEST); // add(rightPanel, BorderLayout.EAST); // setBackground(SystemColor.control); cancelTimeout = new Timer(CANCEL_TIMEOUT_MS, new ActionListener() { public void actionPerformed(ActionEvent event) { } }); cancelTimeout.setRepeats(false); } public void setMessage(String message) { infoLabel.setText(message); } public void showProgress(boolean b) { cancelled = false; indeterminate = b; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { progressBar.setIndeterminate(indeterminate); } }); } public void setMaximumValue(int max) { progressBar.setMaximum(max); } @Override public void propertyChange(PropertyChangeEvent evt) { if ("progress" == evt.getPropertyName()) { int progress = (Integer) evt.getNewValue(); setProgress(progress); } } public boolean isCanceled() { return cancelled; } public void setProgress(int progr) { this.progress = progr; SwingUtilities.invokeLater(new Runnable() { public void run() { progressBar.setValue((int) progress); } }); } public void setProgressTitle(String title) { this.progressTitle = title; SwingUtilities.invokeLater(new Runnable() { public void run() { infoLabel.setText(progressTitle + "..."); } }); } @Override public void reasonerTaskBusy() { // TODO Auto-generated method stub } @Override public void reasonerTaskProgressChanged(int value, int max) { progressBar.setMaximum(max); setProgress(value); } @Override public void reasonerTaskStarted(String message) { setProgress(0); setMessage(message); } @Override public void reasonerTaskStopped() { setMessage(""); setProgress(0); } }