1 package net.sf.openrocket.gui.help.tours;
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.awt.event.MouseAdapter;
7 import java.awt.event.MouseEvent;
10 import javax.swing.AbstractListModel;
11 import javax.swing.JButton;
12 import javax.swing.JDialog;
13 import javax.swing.JEditorPane;
14 import javax.swing.JLabel;
15 import javax.swing.JList;
16 import javax.swing.JPanel;
17 import javax.swing.JScrollPane;
18 import javax.swing.ListSelectionModel;
19 import javax.swing.event.ListSelectionEvent;
20 import javax.swing.event.ListSelectionListener;
21 import javax.swing.text.html.HTMLDocument;
22 import javax.swing.text.html.StyleSheet;
24 import net.miginfocom.swing.MigLayout;
25 import net.sf.openrocket.gui.components.StyledLabel;
26 import net.sf.openrocket.gui.components.StyledLabel.Style;
27 import net.sf.openrocket.gui.util.GUIUtil;
28 import net.sf.openrocket.l10n.Translator;
29 import net.sf.openrocket.startup.Application;
30 import net.sf.openrocket.util.Named;
32 public class GuidedTourSelectionDialog extends JDialog {
34 private static final Translator trans = Application.getTranslator();
38 private final SlideSetManager slideSetManager;
39 private final List<String> tourNames;
41 private SlideShowDialog slideShowDialog;
43 private JList tourList;
44 private JEditorPane tourDescription;
45 private JLabel tourLength;
48 public GuidedTourSelectionDialog(Window parent) {
49 super(parent, trans.get("title"), ModalityType.MODELESS);
51 slideSetManager = SlideSetManager.getSlideSetManager();
52 tourNames = slideSetManager.getSlideSetNames();
54 JPanel panel = new JPanel(new MigLayout("fill"));
56 panel.add(new StyledLabel(trans.get("lbl.selectTour"), Style.BOLD), "spanx, wrap rel");
58 tourList = new JList(new TourListModel());
59 tourList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
60 tourList.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
62 public void valueChanged(ListSelectionEvent e) {
66 tourList.addMouseListener(new MouseAdapter() {
68 public void mouseClicked(MouseEvent e) {
69 if (e.getClickCount() == 2) {
74 panel.add(new JScrollPane(tourList), "grow, gapright unrel, w 200lp, h 250lp");
78 // Sub-panel containing description and start button
79 JPanel sub = new JPanel(new MigLayout("fill, ins 0"));
80 sub.add(new StyledLabel(trans.get("lbl.description"), -1), "wrap rel");
82 tourDescription = new JEditorPane("text/html", "");
83 tourDescription.setEditable(false);
84 StyleSheet ss = slideSetManager.getSlideSet(tourNames.get(0)).getStyleSheet();
85 ((HTMLDocument) tourDescription.getDocument()).getStyleSheet().addStyleSheet(ss);
86 sub.add(new JScrollPane(tourDescription), "grow, wrap rel");
88 tourLength = new StyledLabel(-1);
89 sub.add(tourLength, "wrap unrel");
91 JButton start = new JButton(trans.get("btn.start"));
92 start.addActionListener(new ActionListener() {
94 public void actionPerformed(ActionEvent e) {
98 sub.add(start, "growx");
100 panel.add(sub, "grow, wrap para, w 350lp, h 250lp");
104 JButton close = new JButton(trans.get("button.close"));
105 close.addActionListener(new ActionListener() {
107 public void actionPerformed(ActionEvent e) {
108 GuidedTourSelectionDialog.this.dispose();
111 panel.add(close, "spanx, right");
114 GUIUtil.setDisposableDialogOptions(this, close);
115 GUIUtil.rememberWindowPosition(this);
116 tourList.setSelectedIndex(0);
120 private void startTour() {
121 SlideSet ss = getSelectedSlideSet();
126 if (slideShowDialog != null && !slideShowDialog.isVisible()) {
130 if (slideShowDialog == null) {
131 slideShowDialog = new SlideShowDialog(this);
134 slideShowDialog.setSlideSet(ss, 0);
135 slideShowDialog.setVisible(true);
139 private void closeTour() {
140 if (slideShowDialog != null) {
141 slideShowDialog.dispose();
142 slideShowDialog = null;
147 private void updateText() {
148 SlideSet ss = getSelectedSlideSet();
150 tourDescription.setText(ss.getDescription());
151 tourLength.setText(trans.get("lbl.length") + " " + ss.getSlideCount());
153 tourDescription.setText("");
154 tourLength.setText(trans.get("lbl.length"));
159 @SuppressWarnings("unchecked")
160 private SlideSet getSelectedSlideSet() {
161 return ((Named<SlideSet>) tourList.getSelectedValue()).get();
164 private class TourListModel extends AbstractListModel {
167 public Object getElementAt(int index) {
168 String name = tourNames.get(index);
169 SlideSet set = slideSetManager.getSlideSet(name);
170 return new Named<SlideSet>(set, set.getTitle());
174 public int getSize() {
175 return tourNames.size();