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

Last change on this file since 3181 was 3181, checked in by bastiK, 14 years ago

see #4877 - Splashscreen has wrong position on X11 dualhead mode

  • Property svn:eol-style set to native
File size: 5.4 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 setLocationRelativeTo(null);
95
96 // Add ability to hide splash screen by clicking it
97 addMouseListener(new MouseAdapter() {
98 @Override
99 public void mousePressed(MouseEvent event) {
100 setVisible(false);
101 }
102 });
103 }
104
105 public ProgressMonitor getProgressMonitor() {
106 return progressMonitor;
107 }
108
109 static private class SplashScreenProgressRenderer extends JPanel implements ProgressRenderer {
110 private JLabel lblTaskTitle;
111 private JLabel lblCustomText;
112 private JProgressBar progressBar;
113
114 protected void build() {
115 setLayout(new GridBagLayout());
116 GridBagConstraints gc = new GridBagConstraints();
117 gc.gridx = 0;
118 gc.gridy = 0;
119 gc.fill = GridBagConstraints.HORIZONTAL;
120 gc.weightx = 1.0;
121 gc.weighty = 0.0;
122 gc.insets = new Insets(5,0,0,5);
123 add(lblTaskTitle = new JLabel(""), gc);
124
125 gc.gridx = 0;
126 gc.gridy = 1;
127 gc.fill = GridBagConstraints.HORIZONTAL;
128 gc.weightx = 1.0;
129 gc.weighty = 0.0;
130 gc.insets = new Insets(5,0,0,5);
131 add(lblCustomText = new JLabel(""), gc);
132
133 gc.gridx = 0;
134 gc.gridy = 2;
135 gc.fill = GridBagConstraints.HORIZONTAL;
136 gc.weightx = 1.0;
137 gc.weighty = 0.0;
138 gc.insets = new Insets(5,0,0,5);
139 add(progressBar = new JProgressBar(JProgressBar.HORIZONTAL), gc);
140 }
141
142 public SplashScreenProgressRenderer() {
143 build();
144 }
145
146 public void setCustomText(String message) {
147 lblCustomText.setText(message);
148 repaint();
149 }
150
151 public void setIndeterminate(boolean indeterminate) {
152 progressBar.setIndeterminate(indeterminate);
153 repaint();
154 }
155
156 public void setMaximum(int maximum) {
157 progressBar.setMaximum(maximum);
158 repaint();
159 }
160
161 public void setTaskTitle(String taskTitle) {
162 lblTaskTitle.setText(taskTitle);
163 repaint();
164 }
165
166 public void setValue(int value) {
167 progressBar.setValue(value);
168 repaint();
169 }
170 }
171}
Note: See TracBrowser for help on using the repository browser.