+package tim.prune.gui;
+
+import java.awt.CardLayout;
+import java.awt.Component;
+import javax.swing.JPanel;
+
+/**
+ * Layout class enhancing the regular card layout to add the ability to
+ * see which is the current card, how many cards there are, previous / next etc
+ */
+public class WizardLayout extends CardLayout
+{
+ private JPanel _panel = null;
+ private int _currentCard = 0;
+ private int _numCards = 0;
+
+ /**
+ * Constructor
+ * @param inPanel panel controlled by this layout
+ */
+ public WizardLayout(JPanel inPanel)
+ {
+ super();
+ _panel = inPanel;
+ _panel.setLayout(this);
+ }
+
+ /**
+ * Add a card to this layout
+ * @param inCard
+ */
+ public void addCard(Component inCard)
+ {
+ _panel.add(inCard, "card" + _numCards);
+ _numCards++;
+ }
+
+ /**
+ * @return current card index (from 0)
+ */
+ public int getCurrentCardIndex() {
+ return _currentCard;
+ }
+
+ /**
+ * Go to the first card
+ */
+ public void showFirstCard()
+ {
+ first(_panel);
+ _currentCard = 0;
+ }
+
+ /**
+ * Go to the next card
+ */
+ public void showNextCard()
+ {
+ if (_currentCard < (_numCards-1))
+ {
+ next(_panel);
+ _currentCard++;
+ }
+ }
+
+ /**
+ * Go to the previous card
+ */
+ public void showPreviousCard()
+ {
+ if (_currentCard > 0)
+ {
+ previous(_panel);
+ _currentCard--;
+ }
+ }
+
+ /**
+ * @return true if this is the first card
+ */
+ public boolean isFirstCard() {
+ return _currentCard == 0;
+ }
+
+ /**
+ * @return true if this is the last card
+ */
+ public boolean isLastCard() {
+ return _currentCard == (_numCards-1);
+ }
+
+ /**
+ * @param inIndex index (from 0) of the card to show
+ */
+ public void showCard(int inIndex)
+ {
+ if (inIndex >= 0 && inIndex < _numCards) {
+ show(_panel, "card" + inIndex);
+ _currentCard = inIndex;
+ }
+ }
+}