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}