package org.incha.ui; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.border.BevelBorder; import org.incha.ui.jripples.JRipplesResources; public class ProgressMonitorImpl extends JPanel implements TaskProgressMonitor { private static final long serialVersionUID = -3979008622445178343L; private int maximum; private final JLabel text = new JLabel(); private final JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL); private final JButton cancel = new JButton(); private String taskName; private int progress; private AtomicBoolean isCanceled = new AtomicBoolean(); /** * Default constructor. */ public ProgressMonitorImpl() { super(new BorderLayout(3, 0)); cancel.setIcon(new ImageIcon(JRipplesResources.getImage("icons/progress_stop.gif"))); //status panel final JPanel left = new JPanel(new BorderLayout()); left.add(text, BorderLayout.CENTER); left.setBorder(new BevelBorder(BevelBorder.LOWERED)); add(left, BorderLayout.WEST); ///update status label size text.setHorizontalTextPosition(JLabel.LEFT); text.setText("Abra Kadabra prvbbb alklklkjsAbra Kadabra prvbbb alklklkjs"); text.setPreferredSize(text.getPreferredSize()); text.setMinimumSize(text.getMinimumSize()); text.setText("Done"); //progres bar progressBar.setMinimum(0); add(progressBar, BorderLayout.CENTER); //cancel button add(cancel, BorderLayout.EAST); cancel.setEnabled(false); cancel.addActionListener(new ActionListener() { @Override public void actionPerformed(final ActionEvent e) { doCancel(); } }); } /** * */ protected void doCancel() { isCanceled.set(true); cancel.setEnabled(false); } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#setTaskName(java.lang.String) */ @Override public void setTaskName(final String name) { if (!isCanceled()) { this.taskName = name; text.setText(taskName); } } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#getTaskName() */ @Override public String getTaskName() { return taskName; } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#beginTask(java.lang.String, int) */ @Override public void beginTask(final String taskName, final int max) { setTaskName(taskName); setMaximum(max); setTaskName(taskName); isCanceled.set(false); cancel.setEnabled(true); } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#getMaximum() */ @Override public int getMaximum() { return maximum; } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#getProgress() */ @Override public int getProgress() { return progress; } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#done() */ @Override public void done() { progressBar.setValue(getMaximum()); text.setText("Done"); progressBar.setValue(0); cancel.setEnabled(false); repaint(); } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#isCanceled() */ @Override public boolean isCanceled() { return isCanceled.get(); } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#setCanceled(boolean) */ @Override public void setCanceled(final boolean value) { if (value) { doCancel(); } } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#worked(int) */ @Override public void worked(final int value) { if (!isCanceled()) { progressBar.setValue(value); } } /* (non-Javadoc) * @see org.incha.ui.core.TaskProgressMonitor#setMaximum(int) */ @Override public void setMaximum(final int max) { this.maximum = max; progressBar.setMaximum(max); } }