create changelog entry
[debian/openrocket] / core / 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.gui.util.GUIUtil;
19 import net.sf.openrocket.gui.util.Icons;
20 import net.sf.openrocket.l10n.Translator;
21 import net.sf.openrocket.startup.Application;
22 import net.sf.openrocket.util.Chars;
23 import net.sf.openrocket.util.ComparablePair;
24
25 public class UpdateInfoDialog extends JDialog {
26         
27         private final JCheckBox remind;
28         private static final Translator trans = Application.getTranslator();
29
30         public UpdateInfoDialog(UpdateInfo info) {
31                 //// OpenRocket update available
32                 super((Window)null, "OpenRocket update available", ModalityType.APPLICATION_MODAL);
33                 
34                 JPanel panel = new JPanel(new MigLayout("fill"));
35                 
36
37                 panel.add(new JLabel(Icons.loadImageIcon("pix/icon/icon-about.png", "OpenRocket")), 
38                                 "spany 100, top");
39                 
40                 //// <html><b>OpenRocket version
41                 panel.add(new JLabel("<html><b>OpenRocket version " + info.getLatestVersion() +
42                                 " is available!"), "wrap para");
43                 
44                 List<ComparablePair<Integer, String>> updates = info.getUpdates();
45                 if (updates.size() > 0) {
46                         //// Updates include:
47                         panel.add(new JLabel("Updates include:"), "wrap rel");
48                         
49                         Collections.sort(updates);
50                         int count = 0;
51                         int n = -1;
52                         for (int i=updates.size()-1; i>=0; i--) {
53                                 // Add only specific number of top features
54                                 if (count >= 4 && n != updates.get(i).getU())
55                                         break;
56                                 n = updates.get(i).getU();
57                                 panel.add(new JLabel("   " + Chars.BULLET + " " + updates.get(i).getV()), 
58                                                 "wrap 0px");
59                                 count++;
60                         }
61                 }
62
63                 //// Download the new version from:
64                 panel.add(new JLabel("Download the new version from:"), 
65                                 "gaptop para, alignx 50%, wrap unrel");
66                 panel.add(new URLLabel(AboutDialog.OPENROCKET_URL), "alignx 50%, wrap para");
67                 
68                 //// Remind me later
69                 remind = new JCheckBox("Remind me later");
70                 //// Show this update also the next time you start OpenRocket
71                 remind.setToolTipText("Show this update also the next time you start OpenRocket");
72                 remind.setSelected(true);
73                 panel.add(remind);
74                 
75                 //Close button
76                 JButton button = new JButton(trans.get("dlg.but.close"));
77                 button.addActionListener(new ActionListener() {
78                         @Override
79                         public void actionPerformed(ActionEvent e) {
80                                 UpdateInfoDialog.this.dispose();
81                         }
82                 });
83                 panel.add(button, "right, gapright para");
84                 
85                 this.add(panel);
86                 
87                 this.pack();
88                 this.setLocationRelativeTo(null);
89                 GUIUtil.setDisposableDialogOptions(this, button);
90         }
91         
92         
93         public boolean isReminderSelected() {
94                 return remind.isSelected();
95         }
96         
97 }