Changeset 2817 in josm for trunk/src/org/openstreetmap/josm/gui/SplashScreen.java
- Timestamp:
- 2010-01-11T21:06:49+01:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/SplashScreen.java
r2358 r2817 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.awt.AWTEvent;7 6 import java.awt.Color; 8 7 import java.awt.Dimension; … … 12 11 import java.awt.Insets; 13 12 import java.awt.Toolkit; 14 import java.awt.event.AWTEventListener;15 13 import java.awt.event.MouseAdapter; 16 14 import java.awt.event.MouseEvent; … … 18 16 import javax.swing.JLabel; 19 17 import javax.swing.JPanel; 18 import javax.swing.JProgressBar; 20 19 import javax.swing.JSeparator; 21 20 import javax.swing.JWindow; 22 import javax.swing.SwingUtilities;23 21 import javax.swing.border.Border; 24 22 import javax.swing.border.EmptyBorder; 25 23 import javax.swing.border.EtchedBorder; 26 24 27 import org.openstreetmap.josm.actions.AboutAction;28 25 import org.openstreetmap.josm.data.Version; 26 import org.openstreetmap.josm.gui.progress.ProgressMonitor; 27 import org.openstreetmap.josm.gui.progress.ProgressRenderer; 28 import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor; 29 29 import org.openstreetmap.josm.tools.ImageProvider; 30 30 … … 32 32 * Show a splash screen so the user knows what is happening during startup. 33 33 * 34 * @author cbrill35 34 */ 36 35 public class SplashScreen extends JWindow { 37 36 38 private JLabel status;39 private boolean visible;37 private SplashScreenProgressRenderer progressRenderer; 38 private SwingRenderingProgressMonitor progressMonitor; 40 39 41 private Runnable closerRunner; 42 43 public SplashScreen(boolean visible) { 40 public SplashScreen() { 44 41 super(); 45 this.visible=visible;46 47 if (!visible)48 return;49 42 50 43 // Add a nice border to the main splash screen … … 89 82 90 83 // Add a status message 91 status = new JLabel();84 progressRenderer = new SplashScreenProgressRenderer(); 92 85 gbc.gridy = 3; 93 gbc.insets = new Insets( 0, 0, 0, 0);94 innerContentPane.add( status, gbc);95 setStatus(tr("Initializing"));86 gbc.insets = new Insets(5, 5, 10, 5); 87 innerContentPane.add(progressRenderer, gbc); 88 progressMonitor = new SwingRenderingProgressMonitor(progressRenderer); 96 89 97 90 pack(); … … 103 96 screenSize.height / 2 - (labelSize.height / 2)); 104 97 105 // Method to close the splash screen when being clicked or when closeSplash is called106 closerRunner = new Runnable() {107 public void run() {108 setVisible(false);109 dispose();110 }111 };112 113 98 // Add ability to hide splash screen by clicking it 114 99 addMouseListener(new MouseAdapter() { 100 @Override 115 101 public void mousePressed(MouseEvent event) { 116 try { 117 closerRunner.run(); 118 } catch (Exception e) { 119 e.printStackTrace(); 120 // can catch InvocationTargetException 121 // can catch InterruptedException 122 } 102 setVisible(false); 123 103 } 124 104 }); 125 126 // Hide splashscreen when other window is created127 Toolkit.getDefaultToolkit().addAWTEventListener(awtListener, AWTEvent.WINDOW_EVENT_MASK);128 129 setVisible(true);130 105 } 131 106 132 private AWTEventListener awtListener = new AWTEventListener() { 133 public void eventDispatched(AWTEvent event) { 134 if (event.getSource() != SplashScreen.this) { 135 closeSplash(); 136 } 137 } 138 }; 139 140 /** 141 * This method sets the status message. It should be called prior to 142 * actually doing the action. 143 * 144 * @param message 145 * the message to be displayed 146 */ 147 public void setStatus(String message) { 148 if (!visible) 149 return; 150 status.setText(message + "..."); 107 public ProgressMonitor getProgressMonitor() { 108 return progressMonitor; 151 109 } 152 110 153 /** 154 * Closes the splashscreen. Call once you are done starting. 155 */ 156 public void closeSplash() { 157 if (!visible) 158 return; 159 Toolkit.getDefaultToolkit().removeAWTEventListener(awtListener); 160 try { 161 SwingUtilities.invokeLater(closerRunner); 162 } catch (Exception e) { 163 e.printStackTrace(); 164 // can catch InvocationTargetException 165 // can catch InterruptedException 111 static private class SplashScreenProgressRenderer extends JPanel implements ProgressRenderer { 112 private JLabel lblTaskTitle; 113 private JLabel lblCustomText; 114 private JProgressBar progressBar; 115 116 protected void build() { 117 setLayout(new GridBagLayout()); 118 GridBagConstraints gc = new GridBagConstraints(); 119 gc.gridx = 0; 120 gc.gridy = 0; 121 gc.fill = GridBagConstraints.HORIZONTAL; 122 gc.weightx = 1.0; 123 gc.weighty = 0.0; 124 gc.insets = new Insets(5,0,0,5); 125 add(lblTaskTitle = new JLabel(""), gc); 126 127 gc.gridx = 0; 128 gc.gridy = 1; 129 gc.fill = GridBagConstraints.HORIZONTAL; 130 gc.weightx = 1.0; 131 gc.weighty = 0.0; 132 gc.insets = new Insets(5,0,0,5); 133 add(lblCustomText = new JLabel(""), gc); 134 135 gc.gridx = 0; 136 gc.gridy = 2; 137 gc.fill = GridBagConstraints.HORIZONTAL; 138 gc.weightx = 1.0; 139 gc.weighty = 0.0; 140 gc.insets = new Insets(5,0,0,5); 141 add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc); 142 } 143 144 public SplashScreenProgressRenderer() { 145 build(); 146 } 147 148 public void setCustomText(String message) { 149 lblCustomText.setText(message); 150 repaint(); 151 } 152 153 public void setIndeterminate(boolean indeterminate) { 154 progressBar.setIndeterminate(indeterminate); 155 repaint(); 156 } 157 158 public void setMaximum(int maximum) { 159 progressBar.setMaximum(maximum); 160 repaint(); 161 } 162 163 public void setTaskTitle(String taskTitle) { 164 lblTaskTitle.setText(taskTitle); 165 repaint(); 166 } 167 168 public void setValue(int value) { 169 progressBar.setValue(value); 170 repaint(); 166 171 } 167 172 }
Note:
See TracChangeset
for help on using the changeset viewer.