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

Last change on this file since 2828 was 2817, checked in by Gubaer, 14 years ago

fixed #3063: Downloading a plugin yields 3 dialogs at the same time: Downloading plugin / You should restart JOSM / Plugin downloaded
fixed #3628: JOSM blocking itself updating broken plugin
fixed #4187: JOSM deleted random files from disk after start (data loss)
fixed #4199: new version - plugins update vs josm start [should be fixed. Be careful if you have two JOSM instances running. Auto-update of plugins in the second instance will fail because plugin files are locked by the first instance]
fixed #4034: JOSM should auto-download plugin list when it hasn't been downloaded before [JOSM now displays a hint]

fixed: splash screen showing again even if plugins are auto-updated
new: progress indication integrated in splash screen
new: cancelable, asynchronous download of plugins from preferences
new: cancelable, asynchronous download of plugin list from plugin download sites
new: asynchronous loading of plugin information, launch of preferences dialog accelerated
refactored: clean up, documentation of plugin management code (PluginHandler)

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.JLabel;
17import javax.swing.JPanel;
18import javax.swing.JProgressBar;
19import javax.swing.JSeparator;
20import javax.swing.JWindow;
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 JWindow {
36
37 private SplashScreenProgressRenderer progressRenderer;
38 private SwingRenderingProgressMonitor progressMonitor;
39
40 public SplashScreen() {
41 super();
42
43 // Add a nice border to the main splash screen
44 JPanel contentPane = (JPanel)this.getContentPane();
45 Border margin = new EtchedBorder(1, Color.white, Color.gray);
46 contentPane.setBorder(margin);
47
48 // Add a margin from the border to the content
49 JPanel innerContentPane = new JPanel();
50 innerContentPane.setBorder(new EmptyBorder(10, 10, 2, 10));
51 contentPane.add(innerContentPane);
52 innerContentPane.setLayout(new GridBagLayout());
53
54 // Add the logo
55 JLabel logo = new JLabel(ImageProvider.get("logo.png"));
56 GridBagConstraints gbc = new GridBagConstraints();
57 gbc.gridheight = 2;
58 innerContentPane.add(logo, gbc);
59
60 // Add the name of this application
61 JLabel caption = new JLabel("JOSM - " + tr("Java OpenStreetMap Editor"));
62 caption.setFont(new Font("Helvetica", Font.BOLD, 20));
63 gbc.gridheight = 1;
64 gbc.gridx = 1;
65 gbc.insets = new Insets(30, 0, 0, 0);
66 innerContentPane.add(caption, gbc);
67
68 // Add the version number
69 JLabel version = new JLabel(tr("Version {0}", Version.getInstance().getVersionString()));
70 gbc.gridy = 1;
71 gbc.insets = new Insets(0, 0, 0, 0);
72 innerContentPane.add(version, gbc);
73
74 // Add a separator to the status text
75 JSeparator separator = new JSeparator(JSeparator.HORIZONTAL);
76 gbc.gridx = 0;
77 gbc.gridy = 2;
78 gbc.gridwidth = 2;
79 gbc.fill = GridBagConstraints.HORIZONTAL;
80 gbc.insets = new Insets(15, 0, 5, 0);
81 innerContentPane.add(separator, gbc);
82
83 // Add a status message
84 progressRenderer = new SplashScreenProgressRenderer();
85 gbc.gridy = 3;
86 gbc.insets = new Insets(5, 5, 10, 5);
87 innerContentPane.add(progressRenderer, gbc);
88 progressMonitor = new SwingRenderingProgressMonitor(progressRenderer);
89
90 pack();
91
92 // Center the splash screen
93 Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
94 Dimension labelSize = contentPane.getPreferredSize();
95 setLocation(screenSize.width / 2 - (labelSize.width / 2),
96 screenSize.height / 2 - (labelSize.height / 2));
97
98 // Add ability to hide splash screen by clicking it
99 addMouseListener(new MouseAdapter() {
100 @Override
101 public void mousePressed(MouseEvent event) {
102 setVisible(false);
103 }
104 });
105 }
106
107 public ProgressMonitor getProgressMonitor() {
108 return progressMonitor;
109 }
110
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();
171 }
172 }
173}
Note: See TracBrowser for help on using the repository browser.