source: josm/trunk/src/org/openstreetmap/josm/gui/SplashScreen.java@ 2936

Last change on this file since 2936 was 2865, checked in by Gubaer, 14 years ago

fixed #4378: r2862 hangs on startup while processing plugin files
fixed #4365: "Do you want to update plugins" request shown behind Splashscreen
Turned splash screen into an undecorated JFrame. Works on Windows 7 and Ubuntu. Please check again.

File size: 5.6 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Color;
7import java.awt.Dimension;
8import java.awt.Font;
9import java.awt.GridBagConstraints;
10import java.awt.GridBagLayout;
11import java.awt.Insets;
12import java.awt.Toolkit;
13import java.awt.event.MouseAdapter;
14import java.awt.event.MouseEvent;
15
16import javax.swing.JFrame;
17import javax.swing.JLabel;
18import javax.swing.JPanel;
19import javax.swing.JProgressBar;
20import javax.swing.JSeparator;
21import javax.swing.border.Border;
22import javax.swing.border.EmptyBorder;
23import javax.swing.border.EtchedBorder;
24
25import org.openstreetmap.josm.data.Version;
26import org.openstreetmap.josm.gui.progress.ProgressMonitor;
27import org.openstreetmap.josm.gui.progress.ProgressRenderer;
28import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor;
29import org.openstreetmap.josm.tools.ImageProvider;
30
31/**
32 * Show a splash screen so the user knows what is happening during startup.
33 *
34 */
35public class SplashScreen extends JFrame {
36
37 private SplashScreenProgressRenderer progressRenderer;
38 private SwingRenderingProgressMonitor progressMonitor;
39
40 public SplashScreen() {
41 super();
42 setUndecorated(true);
43
44 // Add a nice border to the main splash screen
45 JPanel contentPane = (JPanel)this.getContentPane();
46 Border margin = new EtchedBorder(1, Color.white, Color.gray);
47 contentPane.setBorder(margin);
48
49 // Add a margin from the border to the content
50 JPanel innerContentPane = new JPanel();
51 innerContentPane.setBorder(new EmptyBorder(10, 10, 2, 10));
52 contentPane.add(innerContentPane);
53 innerContentPane.setLayout(new GridBagLayout());
54
55 // Add the logo
56 JLabel logo = new JLabel(ImageProvider.get("logo.png"));
57 GridBagConstraints gbc = new GridBagConstraints();
58 gbc.gridheight = 2;
59 innerContentPane.add(logo, gbc);
60
61 // Add the name of this application
62 JLabel caption = new JLabel("JOSM - " + tr("Java OpenStreetMap Editor"));
63 caption.setFont(new Font("Helvetica", Font.BOLD, 20));
64 gbc.gridheight = 1;
65 gbc.gridx = 1;
66 gbc.insets = new Insets(30, 0, 0, 0);
67 innerContentPane.add(caption, gbc);
68
69 // Add the version number
70 JLabel version = new JLabel(tr("Version {0}", Version.getInstance().getVersionString()));
71 gbc.gridy = 1;
72 gbc.insets = new Insets(0, 0, 0, 0);
73 innerContentPane.add(version, gbc);
74
75 // Add a separator to the status text
76 JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
77 gbc.gridx = 0;
78 gbc.gridy = 2;
79 gbc.gridwidth = 2;
80 gbc.fill = GridBagConstraints.HORIZONTAL;
81 gbc.insets = new Insets(15, 0, 5, 0);
82 innerContentPane.add(separator, gbc);
83
84 // Add a status message
85 progressRenderer = new SplashScreenProgressRenderer();
86 gbc.gridy = 3;
87 gbc.insets = new Insets(5, 5, 10, 5);
88 innerContentPane.add(progressRenderer, gbc);
89 progressMonitor = new SwingRenderingProgressMonitor(progressRenderer);
90
91 pack();
92
93 // Center the splash screen
94 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
95 Dimension labelSize = contentPane.getPreferredSize();
96 setLocation(screenSize.width / 2 - (labelSize.width / 2),
97 screenSize.height / 2 - (labelSize.height / 2));
98
99 // Add ability to hide splash screen by clicking it
100 addMouseListener(new MouseAdapter() {
101 @Override
102 public void mousePressed(MouseEvent event) {
103 setVisible(false);
104 }
105 });
106 }
107
108 public ProgressMonitor getProgressMonitor() {
109 return progressMonitor;
110 }
111
112 static private class SplashScreenProgressRenderer extends JPanel implements ProgressRenderer {
113 private JLabel lblTaskTitle;
114 private JLabel lblCustomText;
115 private JProgressBar progressBar;
116
117 protected void build() {
118 setLayout(new GridBagLayout());
119 GridBagConstraints gc = new GridBagConstraints();
120 gc.gridx = 0;
121 gc.gridy = 0;
122 gc.fill = GridBagConstraints.HORIZONTAL;
123 gc.weightx = 1.0;
124 gc.weighty = 0.0;
125 gc.insets = new Insets(5,0,0,5);
126 add(lblTaskTitle = new JLabel(""), gc);
127
128 gc.gridx = 0;
129 gc.gridy = 1;
130 gc.fill = GridBagConstraints.HORIZONTAL;
131 gc.weightx = 1.0;
132 gc.weighty = 0.0;
133 gc.insets = new Insets(5,0,0,5);
134 add(lblCustomText = new JLabel(""), gc);
135
136 gc.gridx = 0;
137 gc.gridy = 2;
138 gc.fill = GridBagConstraints.HORIZONTAL;
139 gc.weightx = 1.0;
140 gc.weighty = 0.0;
141 gc.insets = new Insets(5,0,0,5);
142 add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
143 }
144
145 public SplashScreenProgressRenderer() {
146 build();
147 }
148
149 public void setCustomText(String message) {
150 lblCustomText.setText(message);
151 repaint();
152 }
153
154 public void setIndeterminate(boolean indeterminate) {
155 progressBar.setIndeterminate(indeterminate);
156 repaint();
157 }
158
159 public void setMaximum(int maximum) {
160 progressBar.setMaximum(maximum);
161 repaint();
162 }
163
164 public void setTaskTitle(String taskTitle) {
165 lblTaskTitle.setText(taskTitle);
166 repaint();
167 }
168
169 public void setValue(int value) {
170 progressBar.setValue(value);
171 repaint();
172 }
173 }
174}
Note: See TracBrowser for help on using the repository browser.