guided tours implementation
[debian/openrocket] / src / net / sf / openrocket / gui / help / tours / SlideShowDialog.java
1 package net.sf.openrocket.gui.help.tours;
2
3 import java.awt.Window;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.util.Locale;
7
8 import javax.swing.JButton;
9 import javax.swing.JDialog;
10 import javax.swing.JPanel;
11 import javax.swing.SwingUtilities;
12 import javax.swing.event.HyperlinkEvent;
13 import javax.swing.event.HyperlinkListener;
14
15 import net.miginfocom.swing.MigLayout;
16 import net.sf.openrocket.gui.util.GUIUtil;
17 import net.sf.openrocket.l10n.Translator;
18 import net.sf.openrocket.startup.Application;
19 import net.sf.openrocket.util.BugException;
20 import net.sf.openrocket.util.Chars;
21
22 public class SlideShowDialog extends JDialog {
23         
24         private static final Translator trans = Application.getTranslator();
25         
26         private SlideShowComponent slideShowComponent;
27         private SlideSet slideSet;
28         private int position;
29         
30         private JButton nextButton;
31         private JButton prevButton;
32         private JButton closeButton;
33         
34         
35         public SlideShowDialog(Window parent) {
36                 super(parent, ModalityType.MODELESS);
37                 
38                 JPanel panel = new JPanel(new MigLayout("fill"));
39                 
40                 slideShowComponent = new SlideShowComponent();
41                 panel.add(slideShowComponent, "spanx, grow, wrap para");
42                 
43
44                 JPanel sub = new JPanel(new MigLayout("ins 0, fill"));
45                 
46                 prevButton = new JButton(Chars.LEFT_ARROW + " " + trans.get("btn.prev"));
47                 prevButton.addActionListener(new ActionListener() {
48                         @Override
49                         public void actionPerformed(ActionEvent e) {
50                                 setPosition(position - 1);
51                         }
52                 });
53                 sub.add(prevButton, "left");
54                 
55
56
57                 nextButton = new JButton(trans.get("btn.next") + " " + Chars.RIGHT_ARROW);
58                 nextButton.addActionListener(new ActionListener() {
59                         @Override
60                         public void actionPerformed(ActionEvent e) {
61                                 setPosition(position + 1);
62                         }
63                 });
64                 sub.add(nextButton, "left, gapleft para");
65                 
66
67                 sub.add(new JPanel(), "growx");
68                 
69
70                 closeButton = new JButton(trans.get("button.close"));
71                 closeButton.addActionListener(new ActionListener() {
72                         @Override
73                         public void actionPerformed(ActionEvent e) {
74                                 SlideShowDialog.this.dispose();
75                         }
76                 });
77                 sub.add(closeButton, "right");
78                 
79
80                 panel.add(sub, "growx");
81                 
82                 this.add(panel);
83                 updateEnabled();
84                 GUIUtil.setDisposableDialogOptions(this, nextButton);
85                 this.setAlwaysOnTop(true);
86         }
87         
88         public void setSlideSet(SlideSet slideSet, int position) {
89                 this.slideSet = slideSet;
90                 this.setTitle(slideSet.getTitle() + " " + Chars.EMDASH + " OpenRocket");
91                 slideShowComponent.setStyleSheet(slideSet.getStyleSheet());
92                 setPosition(position);
93         }
94         
95         public void setPosition(int position) {
96                 if (this.slideSet == null) {
97                         throw new BugException("setPosition called when slideSet is null");
98                 }
99                 
100                 if (position < 0 || position >= slideSet.getSlideCount()) {
101                         throw new BugException("position exceeds slide count, position=" + position +
102                                         " slideCount=" + slideSet.getSlideCount());
103                 }
104                 
105                 this.position = position;
106                 slideShowComponent.setSlide(slideSet.getSlide(position));
107                 updateEnabled();
108         }
109         
110         
111         private void updateEnabled() {
112                 if (slideSet == null) {
113                         prevButton.setEnabled(false);
114                         nextButton.setEnabled(false);
115                         return;
116                 }
117                 
118                 prevButton.setEnabled(position > 0);
119                 nextButton.setEnabled(position < slideSet.getSlideCount() - 1);
120         }
121         
122         
123         public static void main(String[] args) throws Exception {
124                 
125                 Locale.setDefault(new Locale("de", "DE", ""));
126                 
127                 SlideSetManager manager = new SlideSetManager("datafiles/tours");
128                 manager.load();
129                 
130                 final SlideSet set = manager.getSlideSet("test.tour");
131                 
132                 SwingUtilities.invokeAndWait(new Runnable() {
133                         @Override
134                         public void run() {
135                                 
136                                 SlideShowDialog ssd = new SlideShowDialog(null);
137                                 
138                                 ssd.slideShowComponent.addHyperlinkListener(new HyperlinkListener() {
139                                         @Override
140                                         public void hyperlinkUpdate(HyperlinkEvent e) {
141                                                 System.out.println("Hyperlink event: " + e);
142                                                 System.out.println("Event type: " + e.getEventType());
143                                                 System.out.println("Description: " + e.getDescription());
144                                                 System.out.println("URL: " + e.getURL());
145                                                 System.out.println("Source element: " + e.getSourceElement());
146                                                 
147                                         }
148                                 });
149                                 
150                                 ssd.setSize(500, 500);
151                                 ssd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
152                                 ssd.setVisible(true);
153                                 
154                                 ssd.setSlideSet(set, 0);
155                         }
156                 });
157         }
158         
159
160 }