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}