001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.gui.io;
003    
004    import java.awt.GridBagConstraints;
005    import java.awt.GridBagLayout;
006    import java.awt.Insets;
007    import java.beans.PropertyChangeEvent;
008    import java.beans.PropertyChangeListener;
009    
010    import javax.swing.JLabel;
011    import javax.swing.JPanel;
012    import javax.swing.JProgressBar;
013    
014    import org.openstreetmap.josm.gui.io.SaveLayersModel.Mode;
015    import org.openstreetmap.josm.gui.progress.ProgressRenderer;
016    
017    class 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        public void setCustomText(String message) {
058            lblCustomText.setText(message);
059            repaint();
060        }
061    
062        public void setIndeterminate(boolean indeterminate) {
063            progressBar.setIndeterminate(indeterminate);
064            repaint();
065        }
066    
067        public void setMaximum(int maximum) {
068            progressBar.setMaximum(maximum);
069            repaint();
070        }
071    
072        public void setTaskTitle(String taskTitle) {
073            lblTaskTitle.setText(taskTitle);
074            repaint();
075        }
076    
077        public void setValue(int value) {
078            progressBar.setValue(value);
079            repaint();
080        }
081    
082        public void propertyChange(PropertyChangeEvent evt) {
083            if (evt.getPropertyName().equals(SaveLayersModel.MODE_PROP)) {
084                Mode mode = (Mode)evt.getNewValue();
085                switch(mode) {
086                    case EDITING_DATA: setVisible(false); break;
087                    case UPLOADING_AND_SAVING: setVisible(true); break;
088                }
089            }
090            getParent().validate();
091        }
092    }