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

Last change on this file since 4120 was 4030, checked in by stoecker, 13 years ago

adjust splash screen borders

  • Property svn:eol-style set to native
File size: 5.8 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.event.MouseAdapter;
13import java.awt.event.MouseEvent;
14
15import javax.swing.JFrame;
16import javax.swing.JLabel;
17import javax.swing.JPanel;
18import javax.swing.JProgressBar;
19import javax.swing.JSeparator;
20import javax.swing.border.Border;
21import javax.swing.border.EmptyBorder;
22import javax.swing.border.EtchedBorder;
23
24import org.openstreetmap.josm.data.Version;
25import org.openstreetmap.josm.gui.progress.ProgressMonitor;
26import org.openstreetmap.josm.gui.progress.ProgressRenderer;
27import org.openstreetmap.josm.gui.progress.SwingRenderingProgressMonitor;
28import org.openstreetmap.josm.tools.ImageProvider;
29
30/**
31 * Show a splash screen so the user knows what is happening during startup.
32 *
33 */
34public class SplashScreen extends JFrame {
35
36 private SplashScreenProgressRenderer progressRenderer;
37 private SwingRenderingProgressMonitor progressMonitor;
38
39 public SplashScreen() {
40 super();
41 setUndecorated(true);
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(0, 0, 10, 0);
87 innerContentPane.add(progressRenderer, gbc);
88 progressMonitor = new SwingRenderingProgressMonitor(progressRenderer);
89
90 pack();
91
92 // Center the splash screen
93 setLocationRelativeTo(null);
94
95 // Add ability to hide splash screen by clicking it
96 addMouseListener(new MouseAdapter() {
97 @Override
98 public void mousePressed(MouseEvent event) {
99 setVisible(false);
100 }
101 });
102 }
103
104 public ProgressMonitor getProgressMonitor() {
105 return progressMonitor;
106 }
107
108 static private class SplashScreenProgressRenderer extends JPanel implements ProgressRenderer {
109 private JLabel lblTaskTitle;
110 private JLabel lblCustomText;
111 private JProgressBar progressBar;
112
113 protected void build() {
114 setLayout(new GridBagLayout());
115 GridBagConstraints gc = new GridBagConstraints();
116 gc.gridx = 0;
117 gc.gridy = 0;
118 gc.fill = GridBagConstraints.HORIZONTAL;
119 gc.weightx = 1.0;
120 gc.weighty = 0.0;
121 gc.insets = new Insets(5,0,0,0);
122 add(lblTaskTitle = new JLabel(" "), gc);
123
124 gc.gridx = 0;
125 gc.gridy = 1;
126 gc.fill = GridBagConstraints.HORIZONTAL;
127 gc.weightx = 1.0;
128 gc.weighty = 0.0;
129 gc.insets = new Insets(5,0,0,0);
130 add(lblCustomText = new JLabel(" ") {
131 @Override
132 public Dimension getPreferredSize() {
133 Dimension d = super.getPreferredSize();
134 if(d.width < 600) d.width = 600;
135 return d;
136 }
137 }, gc);
138
139 gc.gridx = 0;
140 gc.gridy = 2;
141 gc.fill = GridBagConstraints.HORIZONTAL;
142 gc.weightx = 1.0;
143 gc.weighty = 0.0;
144 gc.insets = new Insets(5,0,0,0);
145 add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
146 }
147
148 public SplashScreenProgressRenderer() {
149 build();
150 }
151
152 public void setCustomText(String message) {
153 if(message.isEmpty())
154 message = " "; /* prevent killing of additional line */
155 lblCustomText.setText(message);
156 repaint();
157 }
158
159 public void setIndeterminate(boolean indeterminate) {
160 progressBar.setIndeterminate(indeterminate);
161 repaint();
162 }
163
164 public void setMaximum(int maximum) {
165 progressBar.setMaximum(maximum);
166 repaint();
167 }
168
169 public void setTaskTitle(String taskTitle) {
170 lblTaskTitle.setText(taskTitle);
171 repaint();
172 }
173
174 public void setValue(int value) {
175 progressBar.setValue(value);
176 repaint();
177 }
178 }
179}
Note: See TracBrowser for help on using the repository browser.