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