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
017/**
018 * A {@link ProgressRenderer} used for upload/save action in the {@link SaveLayersDialog}.
019 */
020class UploadAndSaveProgressRenderer extends JPanel implements ProgressRenderer, PropertyChangeListener {
021
022    private final JLabel lblTaskTitle = new JLabel("");
023    private final JLabel lblCustomText = new JLabel("");
024    private final JProgressBar progressBar = new JProgressBar(JProgressBar.HORIZONTAL);
025
026    /**
027     * Constructs a new {@code UploadAndSaveProgressRenderer}.
028     */
029    UploadAndSaveProgressRenderer() {
030        build();
031        // initially not visible
032        setVisible(false);
033    }
034
035    protected void build() {
036        setLayout(new GridBagLayout());
037        GridBagConstraints gc = new GridBagConstraints();
038        gc.gridx = 0;
039        gc.gridy = 0;
040        gc.fill = GridBagConstraints.HORIZONTAL;
041        gc.weightx = 1.0;
042        gc.weighty = 0.0;
043        gc.insets = new Insets(5, 0, 0, 5);
044        add(lblTaskTitle, gc);
045        lblTaskTitle.setLabelFor(lblCustomText);
046
047        gc.gridy = 1;
048        add(lblCustomText, gc);
049        lblCustomText.setLabelFor(progressBar);
050
051        gc.gridy = 2;
052        add(progressBar, gc);
053    }
054
055    @Override
056    public void setCustomText(String message) {
057        lblCustomText.setText(message);
058        repaint();
059    }
060
061    @Override
062    public void setIndeterminate(boolean indeterminate) {
063        progressBar.setIndeterminate(indeterminate);
064        repaint();
065    }
066
067    @Override
068    public void setMaximum(int maximum) {
069        progressBar.setMaximum(maximum);
070        repaint();
071    }
072
073    @Override
074    public void setTaskTitle(String taskTitle) {
075        lblTaskTitle.setText(taskTitle);
076        repaint();
077    }
078
079    @Override
080    public void setValue(int value) {
081        progressBar.setValue(value);
082        repaint();
083    }
084
085    @Override
086    public void propertyChange(PropertyChangeEvent evt) {
087        if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
088            setVisible(Mode.UPLOADING_AND_SAVING == evt.getNewValue());
089        }
090        getParent().validate();
091    }
092}