X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FProgressBar.java;h=7c983985158865e0f3f145216c8a7c4c6431f29d;hb=747167089ecf8d6afc70d417f5a20352e029bd95;hp=f6710bc244b1d51c92a75585805c225501f4de77;hpb=17e77c3f2949a0729322b4a8d907f3f34b6a9914;p=jalview.git diff --git a/src/jalview/gui/ProgressBar.java b/src/jalview/gui/ProgressBar.java index f6710bc..7c98398 100644 --- a/src/jalview/gui/ProgressBar.java +++ b/src/jalview/gui/ProgressBar.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9) - * Copyright (C) 2015 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * This file is part of Jalview. * @@ -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) - { - System.err - .println("call setProgressBar before registering the progress bar's handler."); - 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() - { + SwingUtilities.invokeLater(new Runnable() + { @Override - public void actionPerformed(ActionEvent e) + public void run() { - handler.cancelActivity(id); - us.setProgressBar(MessageManager.formatMessage( - "label.cancelled_params", - new Object[] { ((JLabel) progressPanel.getComponent(0)) - .getText() }), id); + final JPanel progressPanel = progressBars.get(id); + if (progressPanel == null) + { + System.err.println( + "call setProgressBar before registering the progress bar's handler."); + return; + } + + /* + * Nothing useful to do if not a Cancel handler + */ + if (!handler.canCancel()) + { + return; + } + + 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 + .formatMessage("label.cancelled_params", new Object[] + { ((JLabel) progressPanel.getComponent(0)).getText() }), + id); + } + }); + progressPanel.add(cancel, BorderLayout.EAST); + refreshLayout(); + } }); - progressPanel.add(cancel, BorderLayout.EAST); - refreshLayout(); } }