/* * This file is part of the OSMembrane project. * More informations under www.osmembrane.de * * The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0. * for more details about the license see http://www.osmembrane.de/license/ * * Source: $HeadURL$ ($Revision$) * Last changed: $Date$ */ package de.osmembrane.view.frames; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import de.osmembrane.resources.Resource; import de.osmembrane.tools.I18N; import de.osmembrane.tools.IconLoader.Size; import de.osmembrane.view.AbstractFrame; /** * The dialog to show the quickstart tutorial. * * @author tobias_kuhn * */ public class TutorialFrame extends AbstractFrame { private static final long serialVersionUID = -370948835878778575L; /** * Class to represent one step in the tutorial. * * @author tobias_kuhn * */ static class TutorialStep { /** * File from which the image shall be loaded */ private String imageFile; /** * Name of the step */ private String imageName; /** * Creates a new {@link TutorialStep} with the values specified. * * @param imageFile * @param imageName */ public TutorialStep(String imageFile, String imageName) { this.imageFile = imageFile; this.imageName = imageName; } /** * @return the image file name */ public String getImageFile() { return this.imageFile; } /** * @return the image name */ public String getImageName() { return this.imageName; } } /* TutorialStep */ /** * The arrays of the images to display and their card names. */ private static final TutorialStep[] steps = { new TutorialStep("step1.png", "AddFunction"), new TutorialStep("step2.png", "SetTaskParam"), new TutorialStep("step3.png", "ConnectFuncs"), new TutorialStep("step4.png", "Toolbar") }; /** * id of the image currently shown */ private int currentlyShowing; /** * The panel showing the tutorial's content. */ private JPanel content; /** * The layout of content. */ private CardLayout cards; /** * Buttons to go backwards and forwards. */ private JButton backButton; private JButton nextButton; /** * Creates a new {@link TutorialFrame}. */ public TutorialFrame() { setLayout(new BorderLayout()); content = new JPanel(); cards = new CardLayout(); content.setLayout(cards); for (TutorialStep ts : steps) { content.add( new JLabel(Resource.QUICKSTART_IMAGE.getImageIcon( ts.getImageFile(), Size.ORIGINAL)), ts.getImageName()); } add(content, BorderLayout.CENTER); // buttons JPanel buttonGrid = new JPanel(); buttonGrid.setLayout(new GridLayout(1, 3)); backButton = new JButton(I18N.getInstance().getString("View.Back")); backButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (currentlyShowing > 0) { setCurrentlyShowing(currentlyShowing - 1); } } }); buttonGrid.add(backButton); nextButton = new JButton(I18N.getInstance().getString("View.Next")); nextButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (currentlyShowing < steps.length - 1) { setCurrentlyShowing(currentlyShowing + 1); } } }); buttonGrid.add(nextButton); JButton closeButton = new JButton(I18N.getInstance().getString( "View.Close")); closeButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { hideWindow(); } }); buttonGrid.add(closeButton); nextButton.requestFocus(); JPanel buttons = new JPanel(); buttons.setLayout(new FlowLayout(FlowLayout.RIGHT)); buttons.add(buttonGrid); add(buttons, BorderLayout.SOUTH); setTitle(I18N.getInstance().getString("View.TutorialDialog")); setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); setCurrentlyShowing(0); pack(); centerWindow(); } /** * Sets the new step to be currently showing. * * @param toShow * step to show */ private void setCurrentlyShowing(int toShow) { if ((toShow < 0) || (toShow >= steps.length)) { return; } this.currentlyShowing = toShow; cards.show(content, steps[this.currentlyShowing].getImageName()); backButton.setEnabled(toShow > 0); nextButton.setEnabled(toShow < steps.length - 1); } }