X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FProgressBar.java;h=7c983985158865e0f3f145216c8a7c4c6431f29d;hb=8307be83ae28064b8f606f6c7a77dd186485a0fa;hp=ea341e3ed9cd341989be07aae02cba69b346ca20;hpb=3d0101179759ef157b088ea135423cd909512d9f;p=jalview.git diff --git a/src/jalview/gui/ProgressBar.java b/src/jalview/gui/ProgressBar.java index ea341e3..7c98398 100644 --- a/src/jalview/gui/ProgressBar.java +++ b/src/jalview/gui/ProgressBar.java @@ -83,14 +83,14 @@ public class ProgressBar implements IProgressIndicator throw new NullPointerException(); } if (!GridLayout.class - .isAssignableFrom(container.getLayout().getClass())) + .isAssignableFrom(container.getLayout().getClass())) { throw new IllegalArgumentException("Container must have GridLayout"); } this.statusPanel = container; this.statusBar = statusBar; - this.progressBars = new Hashtable(); - this.progressBarHandlers = new Hashtable(); + this.progressBars = new Hashtable<>(); + this.progressBarHandlers = new Hashtable<>(); } @@ -119,46 +119,88 @@ public class ProgressBar implements IProgressIndicator * execution. */ @Override - public void setProgressBar(String message, long id) + public void setProgressBar(final String message, final long id) { - Long longId = Long.valueOf(id); - - JPanel progressPanel = progressBars.get(longId); - if (progressPanel != null) + SwingUtilities.invokeLater(new Runnable() { - /* - * Progress bar is displayed for this id - remove it now, and any handler - */ - progressBars.remove(id); - if (message != null && statusBar != null) - { - statusBar.setText(message); - } - if (progressBarHandlers.containsKey(longId)) + @Override + public void run() { - progressBarHandlers.remove(longId); + if (progressBars.containsKey(id)) + { + /* + * Progress bar is displayed for this id - remove it now, and any handler + */ + removeProgressBar(id); + if (message != null && statusBar != null) + { + statusBar.setText(message); + } + } + else + { + /* + * No progress bar for this id - add one now + */ + addProgressBar(id, message); + } } - removeRow(progressPanel); - } - else - { - /* - * No progress bar for this id - add one now - */ - progressPanel = new JPanel(new BorderLayout(10, 5)); + }); + + } + /** + * Add a progress bar for the given id if it doesn't exist displaying the + * provided message. Subsequent calls do nothing. + * + * @param id + * progress bar identifier + * @param message + * displayed message + */ + @Override + public void addProgressBar(final long id, final String message) + { + if (progressBars.containsKey(id)) + return; + JPanel progressPanel = new JPanel(new BorderLayout(10, 5)); + progressBars.put(id, progressPanel); + Runnable r = () -> { JProgressBar progressBar = new JProgressBar(); progressBar.setIndeterminate(true); - progressPanel.add(new JLabel(message), BorderLayout.WEST); progressPanel.add(progressBar, BorderLayout.CENTER); - addRow(progressPanel); + refreshLayout(); + }; + if (SwingUtilities.isEventDispatchThread()) + r.run(); + else + SwingUtilities.invokeLater(r); + } - progressBars.put(longId, progressPanel); - } - - refreshLayout(); + /** + * Remove a progress bar for the given id if it exists. Subsequent calls do + * nothing. + * + * @param id + * id of the progress bar to be removed + */ + @Override + public void removeProgressBar(final long id) + { + JPanel progressPanel = progressBars.remove(id); + if (progressPanel == null) + return; + progressBarHandlers.remove(id); + Runnable r = () -> { + removeRow(progressPanel); + refreshLayout(); + }; + if (SwingUtilities.isEventDispatchThread()) + r.run(); + else + SwingUtilities.invokeLater(r); } /** @@ -213,43 +255,52 @@ public class ProgressBar implements IProgressIndicator */ @Override public void registerHandler(final long id, - final IProgressIndicatorHandler handler) + final IProgressIndicatorHandler handler) { - Long longId = Long.valueOf(id); - final JPanel progressPanel = progressBars.get(longId); - if (progressPanel == null) + final IProgressIndicator us = this; + + SwingUtilities.invokeLater(new Runnable() { - System.err.println( + @Override + public void run() + { + final JPanel progressPanel = progressBars.get(id); + if (progressPanel == null) + { + System.err.println( "call setProgressBar before registering the progress bar's handler."); - return; - } + return; + } - /* - * Nothing useful to do if not a Cancel handler - */ - if (!handler.canCancel()) - { - return; - } + /* + * Nothing useful to do if not a Cancel handler + */ + if (!handler.canCancel()) + { + return; + } - progressBarHandlers.put(longId, handler); - JButton cancel = new JButton(MessageManager.getString("action.cancel")); - final IProgressIndicator us = this; - cancel.addActionListener(new ActionListener() - { + progressBarHandlers.put(id, handler); + JButton cancel = new JButton( + MessageManager.getString("action.cancel")); + cancel.addActionListener(new ActionListener() + { - @Override - public void actionPerformed(ActionEvent e) - { - handler.cancelActivity(id); - us.setProgressBar(MessageManager + @Override + public void actionPerformed(ActionEvent e) + { + handler.cancelActivity(id); + us.setProgressBar(MessageManager .formatMessage("label.cancelled_params", new Object[] { ((JLabel) progressPanel.getComponent(0)).getText() }), id); + } + }); + progressPanel.add(cancel, BorderLayout.EAST); + refreshLayout(); + } }); - progressPanel.add(cancel, BorderLayout.EAST); - refreshLayout(); } }