Updates for 0.9.5
[debian/openrocket] / src / net / sf / openrocket / gui / dialogs / UpdateInfoDialog.java
1 package net.sf.openrocket.gui.dialogs;
2
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.util.Collections;
7 import java.util.List;
8
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;
14
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;
22
23 public class UpdateInfoDialog extends JDialog {
24         
25         private final JCheckBox remind;
26
27         public UpdateInfoDialog(UpdateInfo info) {
28                 super((Window)null, "OpenRocket update available", ModalityType.APPLICATION_MODAL);
29                 
30                 JPanel panel = new JPanel(new MigLayout("fill"));
31                 
32
33                 panel.add(new JLabel(Icons.loadImageIcon("pix/icon/icon-about.png", "OpenRocket")), 
34                                 "spany 100, top");
35                 
36                 
37                 panel.add(new JLabel("<html><b>OpenRocket version " + info.getLatestVersion() +
38                                 " is available!"), "wrap para");
39                 
40                 List<ComparablePair<Integer, String>> updates = info.getUpdates();
41                 if (updates.size() > 0) {
42                         panel.add(new JLabel("Updates include:"), "wrap rel");
43                         
44                         Collections.sort(updates);
45                         int count = 0;
46                         int n = -1;
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())
50                                         break;
51                                 n = updates.get(i).getU();
52                                 panel.add(new JLabel("   " + Chars.BULLET + " " + updates.get(i).getV()), 
53                                                 "wrap 0px");
54                                 count++;
55                         }
56                 }
57
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");
61                 
62                 remind = new JCheckBox("Remind me later");
63                 remind.setToolTipText("Show this update also the next time you start OpenRocket");
64                 remind.setSelected(true);
65                 panel.add(remind);
66                 
67                 JButton button = new JButton("Close");
68                 button.addActionListener(new ActionListener() {
69                         @Override
70                         public void actionPerformed(ActionEvent e) {
71                                 UpdateInfoDialog.this.dispose();
72                         }
73                 });
74                 panel.add(button, "right, gapright para");
75                 
76                 this.add(panel);
77                 
78                 this.pack();
79                 this.setLocationRelativeTo(null);
80                 GUIUtil.setDisposableDialogOptions(this, button);
81         }
82         
83         
84         public boolean isReminderSelected() {
85                 return remind.isSelected();
86         }
87         
88 }