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 JLabel lblTaskTitle;
020    private JLabel lblCustomText;
021    private JProgressBar progressBar;
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 = new JLabel(""), gc);
042
043        gc.gridx = 0;
044        gc.gridy = 1;
045        gc.fill = GridBagConstraints.HORIZONTAL;
046        gc.weightx = 1.0;
047        gc.weighty = 0.0;
048        gc.insets = new Insets(5, 0, 0, 5);
049        add(lblCustomText = new JLabel(""), gc);
050
051        gc.gridx = 0;
052        gc.gridy = 2;
053        gc.fill = GridBagConstraints.HORIZONTAL;
054        gc.weightx = 1.0;
055        gc.weighty = 0.0;
056        gc.insets = new Insets(5, 0, 0, 5);
057        add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
058    }
059
060    @Override
061    public void setCustomText(String message) {
062        lblCustomText.setText(message);
063        repaint();
064    }
065
066    @Override
067    public void setIndeterminate(boolean indeterminate) {
068        progressBar.setIndeterminate(indeterminate);
069        repaint();
070    }
071
072    @Override
073    public void setMaximum(int maximum) {
074        progressBar.setMaximum(maximum);
075        repaint();
076    }
077
078    @Override
079    public void setTaskTitle(String taskTitle) {
080        lblTaskTitle.setText(taskTitle);
081        repaint();
082    }
083
084    @Override
085    public void setValue(int value) {
086        progressBar.setValue(value);
087        repaint();
088    }
089
090    @Override
091    public void propertyChange(PropertyChangeEvent evt) {
092        if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
093            Mode mode = (Mode) evt.getNewValue();
094            switch(mode) {
095                case EDITING_DATA: setVisible(false); break;
096                case UPLOADING_AND_SAVING: setVisible(true); break;
097            }
098        }
099        getParent().validate();
100    }
101}