1 package net.sf.openrocket.gui.dialogs;
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.util.Collections;
9 import javax.swing.JButton;
10 import javax.swing.JCheckBox;
11 import javax.swing.JDialog;
12 import javax.swing.JLabel;
13 import javax.swing.JPanel;
15 import net.miginfocom.swing.MigLayout;
16 import net.sf.openrocket.communication.UpdateInfo;
17 import net.sf.openrocket.gui.components.URLLabel;
18 import net.sf.openrocket.util.Chars;
19 import net.sf.openrocket.util.ComparablePair;
20 import net.sf.openrocket.util.GUIUtil;
21 import net.sf.openrocket.util.Icons;
23 public class UpdateInfoDialog extends JDialog {
25 private final JCheckBox remind;
27 public UpdateInfoDialog(UpdateInfo info) {
28 super((Window)null, "OpenRocket update available", ModalityType.APPLICATION_MODAL);
30 JPanel panel = new JPanel(new MigLayout("fill"));
33 panel.add(new JLabel(Icons.loadImageIcon("pix/icon/icon-about.png", "OpenRocket")),
37 panel.add(new JLabel("<html><b>OpenRocket version " + info.getLatestVersion() +
38 " is available!"), "wrap para");
40 List<ComparablePair<Integer, String>> updates = info.getUpdates();
41 if (updates.size() > 0) {
42 panel.add(new JLabel("Updates include:"), "wrap rel");
44 Collections.sort(updates);
47 for (int i=updates.size()-1; i>=0; i--) {
48 // Add only specific number of top features
49 if (count >= 4 && n != updates.get(i).getU())
51 n = updates.get(i).getU();
52 panel.add(new JLabel(" " + Chars.BULLET + " " + updates.get(i).getV()),
58 panel.add(new JLabel("Download the new version from:"),
59 "gaptop para, alignx 50%, wrap unrel");
60 panel.add(new URLLabel(AboutDialog.OPENROCKET_URL), "alignx 50%, wrap para");
62 remind = new JCheckBox("Remind me later");
63 remind.setToolTipText("Show this update also the next time you start OpenRocket");
64 remind.setSelected(true);
67 JButton button = new JButton("Close");
68 button.addActionListener(new ActionListener() {
70 public void actionPerformed(ActionEvent e) {
71 UpdateInfoDialog.this.dispose();
74 panel.add(button, "right, gapright para");
79 this.setLocationRelativeTo(null);
80 GUIUtil.setDisposableDialogOptions(this, button);
84 public boolean isReminderSelected() {
85 return remind.isSelected();