001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.io;
003
004import java.awt.GridBagConstraints;
005import java.awt.GridBagLayout;
006import java.awt.Insets;
007import java.beans.PropertyChangeEvent;
008import java.beans.PropertyChangeListener;
009
010import javax.swing.JLabel;
011import javax.swing.JPanel;
012import javax.swing.JProgressBar;
013
014import org.openstreetmap.josm.gui.io.SaveLayersModel.Mode;
015import org.openstreetmap.josm.gui.progress.ProgressRenderer;
016
017class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer, PropertyChangeListener {
018
019    private final JLabel lblTaskTitle = new JLabel("");
020    private final JLabel lblCustomText = new JLabel("");
021    private final JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
022
023    /**
024     * Constructs a new {@code UploadAndSaveProgressRenderer}.
025     */
026    UploadAndSaveProgressRenderer() {
027        build();
028        // initially not visible
029        setVisible(false);
030    }
031
032    protected void build() {
033        setLayout(new GridBagLayout());
034        GridBagConstraints gc = new GridBagConstraints();
035        gc.gridx = 0;
036        gc.gridy = 0;
037        gc.fill = GridBagConstraints.HORIZONTAL;
038        gc.weightx = 1.0;
039        gc.weighty = 0.0;
040        gc.insets = new Insets(5, 0, 0, 5);
041        add(lblTaskTitle, gc);
042        lblTaskTitle.setLabelFor(lblCustomText);
043
044        gc.gridy = 1;
045        add(lblCustomText, gc);
046        lblCustomText.setLabelFor(progressBar);
047
048        gc.gridy = 2;
049        add(progressBar, gc);
050    }
051
052    @Override
053    public void setCustomText(String message) {
054        lblCustomText.setText(message);
055        repaint();
056    }
057
058    @Override
059    public void setIndeterminate(boolean indeterminate) {
060        progressBar.setIndeterminate(indeterminate);
061        repaint();
062    }
063
064    @Override
065    public void setMaximum(int maximum) {
066        progressBar.setMaximum(maximum);
067        repaint();
068    }
069
070    @Override
071    public void setTaskTitle(String taskTitle) {
072        lblTaskTitle.setText(taskTitle);
073        repaint();
074    }
075
076    @Override
077    public void setValue(int value) {
078        progressBar.setValue(value);
079        repaint();
080    }
081
082    @Override
083    public void propertyChange(PropertyChangeEvent evt) {
084        if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
085            setVisible(Mode.UPLOADING_AND_SAVING.equals(evt.getNewValue()));
086        }
087        getParent().validate();
088    }
089}