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.util.Locale;
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;
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;
22 public class SlideShowDialog extends JDialog {
24 private static final Translator trans = Application.getTranslator();
26 private SlideShowComponent slideShowComponent;
27 private SlideSet slideSet;
30 private JButton nextButton;
31 private JButton prevButton;
32 private JButton closeButton;
35 public SlideShowDialog(Window parent) {
36 super(parent, ModalityType.MODELESS);
38 JPanel panel = new JPanel(new MigLayout("fill"));
40 slideShowComponent = new SlideShowComponent();
41 panel.add(slideShowComponent, "spanx, grow, wrap para");
44 JPanel sub = new JPanel(new MigLayout("ins 0, fill"));
46 prevButton = new JButton(Chars.LEFT_ARROW + " " + trans.get("btn.prev"));
47 prevButton.addActionListener(new ActionListener() {
49 public void actionPerformed(ActionEvent e) {
50 setPosition(position - 1);
53 sub.add(prevButton, "left");
57 nextButton = new JButton(trans.get("btn.next") + " " + Chars.RIGHT_ARROW);
58 nextButton.addActionListener(new ActionListener() {
60 public void actionPerformed(ActionEvent e) {
61 setPosition(position + 1);
64 sub.add(nextButton, "left, gapleft para");
67 sub.add(new JPanel(), "growx");
70 closeButton = new JButton(trans.get("button.close"));
71 closeButton.addActionListener(new ActionListener() {
73 public void actionPerformed(ActionEvent e) {
74 SlideShowDialog.this.dispose();
77 sub.add(closeButton, "right");
80 panel.add(sub, "growx");
84 GUIUtil.setDisposableDialogOptions(this, nextButton);
85 this.setAlwaysOnTop(true);
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);
95 public void setPosition(int position) {
96 if (this.slideSet == null) {
97 throw new BugException("setPosition called when slideSet is null");
100 if (position < 0 || position >= slideSet.getSlideCount()) {
101 throw new BugException("position exceeds slide count, position=" + position +
102 " slideCount=" + slideSet.getSlideCount());
105 this.position = position;
106 slideShowComponent.setSlide(slideSet.getSlide(position));
111 private void updateEnabled() {
112 if (slideSet == null) {
113 prevButton.setEnabled(false);
114 nextButton.setEnabled(false);
118 prevButton.setEnabled(position > 0);
119 nextButton.setEnabled(position < slideSet.getSlideCount() - 1);
123 public static void main(String[] args) throws Exception {
125 Locale.setDefault(new Locale("de", "DE", ""));
127 SlideSetManager manager = new SlideSetManager("datafiles/tours");
130 final SlideSet set = manager.getSlideSet("test.tour");
132 SwingUtilities.invokeAndWait(new Runnable() {
136 SlideShowDialog ssd = new SlideShowDialog(null);
138 ssd.slideShowComponent.addHyperlinkListener(new HyperlinkListener() {
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());
150 ssd.setSize(500, 500);
151 ssd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
152 ssd.setVisible(true);
154 ssd.setSlideSet(set, 0);